{"id":51415091,"url":"https://github.com/better-mojo/logger","last_synced_at":"2026-07-04T18:30:39.660Z","repository":{"id":360688760,"uuid":"1248078294","full_name":"better-mojo/logger","owner":"better-mojo","description":"mojo logger, please check: https://prefix.dev/channels/better-mojo","archived":false,"fork":false,"pushed_at":"2026-05-27T12:13:45.000Z","size":114,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T14:12:16.347Z","etag":null,"topics":["ffi","mojo","mojo-lang","spdlog","spdlog-rs"],"latest_commit_sha":null,"homepage":"","language":"Mojo","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/better-mojo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-24T06:48:38.000Z","updated_at":"2026-05-24T12:41:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/better-mojo/logger","commit_stats":null,"previous_names":["better-mojo/logger"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/better-mojo/logger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-mojo%2Flogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-mojo%2Flogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-mojo%2Flogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-mojo%2Flogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/better-mojo","download_url":"https://codeload.github.com/better-mojo/logger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/better-mojo%2Flogger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35132289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ffi","mojo","mojo-lang","spdlog","spdlog-rs"],"created_at":"2026-07-04T18:30:39.596Z","updated_at":"2026-07-04T18:30:39.655Z","avatar_url":"https://github.com/better-mojo.png","language":"Mojo","funding_links":[],"categories":[],"sub_categories":[],"readme":"# logger\n\n- ✅ Binding the popular Rust logging library [spdlog-rs](https://github.com/SpriteOvO/spdlog-rs) via FFI for Mojo usage.\n- ✅ Redesigned API inspired by Python's [loguru](https://github.com/delgan/loguru) logging library for improved usability.\n\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n\n\u003ch3 align=\"center\"\u003eLogger Mojo\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    🐝 Binding spdlog-rs logging library for mojo 🔥\n    \u003cbr/\u003e\n\n![Mojo Version][language-shield]\n[![MIT License][license-shield]][license-url]\n[![Pixi Badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](https://pixi.sh)\n\u003cbr/\u003e\n[![Contributors Welcome][contributors-shield]][contributors-url]\n\n[简体中文](README_CN.md) | English\n\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Package Contents\n\n| Project                             | Package                 | Host | Rank   | Description                              |\n|-------------------------------------|-------------------------|------|--------|------------------------------------------|\n| ✅ [spdlog-ffi](./packages/spdlog-ffi)   | [libspdlog_ffi](https://prefix.dev/channels/better-ffi/packages/libspdlog_ffi) | [prefix.dev](https://prefix.dev/channels/better-ffi) | ⭐️⭐️⭐️ | spdlog-rs ffi package                    |\n| ✅ [spdlog](./packages/spdlog) | [spdlog](https://prefix.dev/channels/better-mojo/packages/spdlog)  | [prefix.dev](https://prefix.dev/channels/better-mojo) | ⭐️⭐️⭐️⭐️   | spdlog-mojo package                      |\n\n## Features\n\n- ✅ Support logging to: `console`, `file`, `stdout`, `stderr`\n- ✅ Support custom log `format`\n- ✅ Support log `level` configuration\n- ✅ Support `colored` logs\n\n## Usage\n\n- Import dependencies:\n\n```toml\n\n# First add channel sources, including spdlog-ffi package and spdlog package\nchannels = [\n    \"https://conda.modular.com/max-nightly\",\n    \"https://repo.prefix.dev/better-ffi\", # contains spdlog-ffi package\n    \"https://repo.prefix.dev/better-mojo\", # contains spdlog mojo package\n    \"conda-forge\",\n]\n\n# Add dependency packages\n[dependencies]\nmojo = \"\u003e=1.0.0b2.dev2026052706,\u003c2\" # TODO X: fix version inconsistency issue!!!\n\n# FFI dependency\nlibspdlog_ffi = \"\u003e=0.1.0,\u003c0.2\"\n\n# Mojo package dependency\n# spdlog = { git = \"https://github.com/better-mojo/logger.git\", branch = \"main\" }\nspdlog = \"\u003e=0.1.2,\u003c0.2\"\n\n```\n\n- ✅ Simple example:\n\n```mojo\nfrom spdlog import get_logger\n\n\ndef main() raises -\u003e None:\n    var logger = get_logger()\n\n    logger.info(\"Hello, World!\")\n    logger.debug(\"Processing item {} of {}\", \"5\", \"100\")\n    logger.warn(\"Disk usage is at {}%\", \"85\")\n\n\n```\n\n- ✅ run:\n\n```bash\n# Run logging example\npixi run mojo -I . examples/logger.mojo\n\n```\n\n\u003cimg width=\"600\" alt=\"image\" src=\"https://github.com/user-attachments/assets/4dddd12b-bcc5-456f-8a03-9a88ced56582\" /\u003e\n\n- ✅ Complete example [examples/try-uuid](examples/try-uuid)\n  - Includes complete package dependency import methods\n\n```bash\n# Install dependencies\npixi install\n\n# Run\npixi run mojo src/main.mojo\n\n```\n\n### File Logging Example\n\n- [examples/logger_file.mojo](examples/logger_file.mojo)\n  - Includes complete package dependency import methods\n  - Includes file logging example\n\n## Development Environment\n\n### Install Dependencies\n\n- Install [Taskfile](https://github.com/go-task/go-task): build tool\n- Install [Rust](https://www.rust-lang.org/tools/install)\n- Install [pixi](https://pixi.sh/)\n- Install [rattler-build](https://rattler-build.prefix.dev/latest/#installation): package management tool, compile + publish rust binary packages\n- Install [mojo](https://mojolang.org/install/)\n\n```bash\ntask setup\n```\n\n### Build and Debug\n\n- ✅ Build and debug spdlog-ffi package\n\n```bash\n\n# Run examples\ntask ffi:r\n\n# Build spdlog-ffi package\ntask ffi:b\n\n# Release spdlog-ffi package\ntask ffi:rel\n\n```\n\n- ✅ Build and debug [examples](./examples)\n\n```bash\n# Run examples\ntask run:logger\n\n```\n\n## Release and Publish to Prefix.dev\n\n- ✅ \u003chttps://prefix.dev/channels/better-ffi\u003e\n- ✅ \u003chttps://prefix.dev/channels/better-mojo\u003e\n- ✅ [Taskfile](./Taskfile.yml)\n\n```bash\n# Publish spdlog-ffi package to prefix.dev\ntask m:q:rs\n\n# Publish spdlog package to prefix.dev\ntask m:q:mojo\n\n```\n\n- ✅ Compile and release Linux version, based on `orbstack` virtual machine\n  - Note: each time you need to publish the ffi library for `3 OS versions` to prefix.dev first, then publish the spdlog package. (dependency order)\n\n```bash\n# List available virtual machines\norbctl list \n\n# Connect to linux-aarch64 architecture virtual machine, execute compile + publish\norbctl run -m u22dev\n\n# Connect to linux-64 architecture virtual machine, execute compile + publish\norbctl run -m u22build\n\n```\n\n## Reference\n\n### Mojo FFI Packages\n\n- ✅ \u003chttps://github.com/better-mojo/uuid\u003e\n- ✅ \u003chttps://github.com/ehsanmok/sqlite\u003e\n\n### Python loguru\n\n- ✅ \u003chttps://github.com/delgan/loguru\u003e\n\n### Rust spdlog\n\n- ✅ \u003chttps://github.com/SpriteOvO/spdlog-rs\u003e\n\n### Rust FFI\n\n- ✅ \u003chttps://github.com/getditto/safer_ffi\u003e\n- ✅ \u003chttps://github.com/f0cii/diplomat\u003e\n  - \u003chttps://github.com/rust-diplomat/diplomat\u003e\n  - \u003chttps://rust-diplomat.github.io/book/\u003e\n- ✅ \u003chttps://github.com/mozilla/uniffi-rs\u003e\n- ✅ \u003chttps://rustwiki.org/zh-CN/std/ffi/struct.CString.html#examples\u003e\n\n[language-shield]: https://img.shields.io/badge/Mojo%F0%9F%94%A5-1.0.0b2-orange\n\n[license-shield]: https://img.shields.io/github/license/better-mojo/jojo?logo=github\n\n[license-url]: https://github.com/better-mojo/jojo/blob/main/LICENSE\n\n[contributors-shield]: https://img.shields.io/badge/contributors-welcome!-blue\n\n[contributors-url]: https://github.com/better-mojo/uuid#contributing\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbetter-mojo%2Flogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbetter-mojo%2Flogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbetter-mojo%2Flogger/lists"}