{"id":14563554,"url":"https://github.com/pijng/moonlogs","last_synced_at":"2025-10-12T20:50:25.748Z","repository":{"id":189510572,"uuid":"680496172","full_name":"pijng/moonlogs","owner":"pijng","description":"Business-event logging tool with a built-in web interface for easy access to events","archived":false,"fork":false,"pushed_at":"2025-07-18T16:24:48.000Z","size":7139,"stargazers_count":26,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-17T08:40:05.657Z","etag":null,"topics":["atomic-router","docker-compose","effector","event-logging","forest","fsd","go","moonlogs","sqlite3","ui"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/pijng.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}},"created_at":"2023-08-19T12:38:37.000Z","updated_at":"2025-08-03T08:16:06.000Z","dependencies_parsed_at":"2023-08-20T15:28:59.529Z","dependency_job_id":"5280f74d-4140-48d7-9b6c-4903b0118b1b","html_url":"https://github.com/pijng/moonlogs","commit_stats":{"total_commits":87,"total_committers":2,"mean_commits":43.5,"dds":"0.011494252873563204","last_synced_commit":"4b97da13a329b4b53910ecb227878cfe9eafcb1b"},"previous_names":["pijng/moonlogs"],"tags_count":205,"template":false,"template_full_name":null,"purl":"pkg:github/pijng/moonlogs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pijng%2Fmoonlogs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pijng%2Fmoonlogs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pijng%2Fmoonlogs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pijng%2Fmoonlogs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pijng","download_url":"https://codeload.github.com/pijng/moonlogs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pijng%2Fmoonlogs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279012807,"owners_count":26085191,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"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":["atomic-router","docker-compose","effector","event-logging","forest","fsd","go","moonlogs","sqlite3","ui"],"created_at":"2024-09-07T02:02:44.868Z","updated_at":"2025-10-12T20:50:25.721Z","avatar_url":"https://github.com/pijng.png","language":"TypeScript","funding_links":[],"categories":["ui"],"sub_categories":[],"readme":"\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"https://github.com/pijng/moonlogs/actions/workflows/steiger-lint.yml\"\u003e\u003cimg src=\"https://github.com/pijng/moonlogs/actions/workflows/steiger-lint.yml/badge.svg\" alt=\"Lint Steiger FSD\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/pijng/moonlogs/actions/workflows/tests.yml\"\u003e\u003cimg src=\"https://github.com/pijng/moonlogs/actions/workflows/tests.yml/badge.svg\" alt=\"Tests\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/pijng/moonlogs/actions/workflows/release.yml\"\u003e\u003cimg src=\"https://github.com/pijng/moonlogs/actions/workflows/release.yml/badge.svg\" alt=\"goreleaser\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"left\u003e\n  \u003ca href=\"https://github.com/pijng/moonlogs-ruby/actions/workflows/release.yml\"\u003e\u003cimg src=\"https://github.com/pijng/moonlogs-ruby/actions/workflows/release.yml/badge.svg\" alt=\"Ruby SDK\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/pijng/moonlogs-ts/actions/workflows/release.yml\"\u003e\u003cimg src=\"https://github.com/pijng/moonlogs-ts/actions/workflows/release.yml/badge.svg\" alt=\"goreleaser\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\n[![Feature-Sliced Design][shields-fsd-white]](https://feature-sliced.design/)\n\n[shields-fsd-white]: https://img.shields.io/badge/Feature--Sliced-Design?style=for-the-badge\u0026labelColor=262224\u0026color=F2F2F2\u0026logoWidth=10\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAACXBIWXMAAALFAAACxQGJ1n/vAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA/SURBVHgB7dKxCgAgCIThs/d/51JoNQIdDrxvqMXlR4FmFs92KDIX/wI7JSdDN+eHtkxIycnQvMNW8hN/crsDc5QgGX9NvT0AAAAASUVORK5CYII=\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/logo.svg\" alt=\"Moonlogs logo\" width=\"30%\" style=\"\"/\u003e\n\u003c/p\u003e\n\n**Moonlogs** is a business-event logging tool with a built-in user-friendly web interface for easy access to events.\n\n## Docs\n\nVisit [moonlogs.pages.dev](https://moonlogs.pages.dev) for documentation and guides about Moonlogs.\n\n## Quick Features\n\n- Meta-groups of events based on business domains\n- Query-based event subgrouping\n- Convenient schema-based filters\n- Flexible event retention time\n- Granular Access Control with Tags\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Features](#features)\n- [SDKs](#SDK)\n- [Considerations](#considerations)\n\n\n## Installation\n\n### Option 1: Using APT Repository\n\n1. **Add APT Repository:**\n\nOpen a terminal and run the following commands to add the APT repository:\n\n```bash\nsudo add-apt-repository \"deb [trusted=yes] https://apt.fury.io/pijng/ /\"\nsudo apt-get update\n```\n\n2. **Install moonlogs package:**\n\n```bash\napt-get install moonlogs\n```\nMoonlogs will be immediately available as a service managed by systemd.\n\n3. **Check the status of the service:**\n\n```bash\nservice moonlogs status\n```\n\nNavigate to [http://localhost:4200](http://localhost:\u003cyour-port\u003e). You should see the moonlogs UI. Follow the instructions for creating the initial administrator there.\n\n\n### Option 2: Using Docker Compose\n\n1. **Prerequisites**\n\nMake sure you have Docker installed on your system.\n\n\n2. **Create a Docker Compose File:**\n\nCreate a file named `docker-compose.yml` in your desired directory and copy the following content into it:\n\n```yaml\nversion: '3'\n\nservices:\n  moonlogs:\n    image: pijng/moonlogs\n    restart: always\n    ports:\n      - \"4200:4200\"\n    volumes:\n      - moonlogs-config:/etc/moonlogs\n      - moonlogs-data:/var/lib/moonlogs\n    command: --port=4200\nvolumes:\n  moonlogs-config:\n  moonlogs-data:\n```\n\nSave the file.\n\n3. **Build and Run the Docker Containers:**\n\nOpen a terminal in your project's root directory and run the following command:\n\n```bash\ndocker-compose up -d\n```\n\nThis will download the moonlogs image and start the moonlogs container in detached mode.\n\n4. **Access moonlogs:**\n\nNavigate to [http://localhost:4200](http://localhost:\u003cyour-port\u003e). You should see the moonlogs UI. Follow the instructions for creating the initial administrator there.\n\n\n### Configuration Options\n\n#### With `docker-compose` installation\n\n- Moonlogs container is configured to run on port 4200 by default. If you need to change the port, update the `--port` parameter in the `command` section of the `docker-compose.yml` file.\n\n- By default, moonlogs uses a Docker volume named `moonlogs-data` to store configuration and database files. This ensures persistent data even if the container is stopped or removed.\nIf you prefer to use your own bind mount for data storage, you can modify the `volumes` section in the `docker-compose.yml` file.\n\n    * Remove the line at the bottom of `docker-compose.yml`:\n\n        ```yaml\n        volumes:\n          moonlogs-data:\n        ```\n\n    * Change the `services.moonlogs.volumes` directive to:\n\n        ```yaml\n        volumes:\n          - \u003cyour-desired-dir-on-host\u003e:/etc/moonlogs\n        ```\n\n    * The resulting file may look like the following:\n\n        ```yaml\n        version: '3'\n\n        services:\n          moonlogs:\n            image: pijng/moonlogs\n            restart: always\n            ports:\n              - \"4200:4200\"\n            volumes:\n              - /etc/moonlogs:/etc/moonlogs\n              - /var/lib/moonlogs:/var/lib/moonlogs\n            command: --port=4200\n        ```\n\n#### With `apt-get` installation\n\n- Moonlogs service is configured to run on port 4200 by default. If you need to change the port, you can modify the `port` parameter in the config file:\n\n  * Open the config file located at `/etc/moonlogs/config.yml`\n\n\n  * Update `port` parameter to your desired port number. For example:\n    ```yaml\n    port: 5000\n    db_path: /var/lib/moonlogs/database.sqlite\n    db_adapter: sqlite\n    read_timeout: 5s\n    write_timeout: 1s\n    ```\n\n  * Restart the moonlogs service to apply the new configuration:\n\n    ```bash\n    service moonlogs restart\n    ```\n\n## Features\n\n#### Meta-groups for log organization\n\n![Meta-groups](./assets/meta_groups.png)\n\nCreate separate meta-groups (schemas) to categorize events by domain areas. For instance, create schemas for the checkout process, user access setting changes, and Uber Eats integration. Events within each schema are recorded independently, facilitating efficient event retrieval.\n\n#### Query-based log subgrouping\n\n![Subgrouping](./assets/subgrouping.png)\n![Integrity](./assets/events_integrity.png)\n\nGroup events within a schema based on specified queries to enhance information integrity. Events for distinct clients, such as those with IDs 4 and 5, will be segregated within the overall schema. This not only simplifies searchability but also ensures unrelated events remain separate even if in the same schema.\n\n#### Convenient schema-based filters\n\n![Query filters](./assets/filters.png)\n![Time filters](./assets/filters_time.png)\n\nGenerate convenient filters on the web interface for each schema, simplifying event search by allowing users to simply input values. This eliminates the complexity of composing queries with an undefined set of parameters, making it user-friendly, especially for non-technical personnel.\n\n#### Flexible event retention time\n\n![Retention days](./assets/retention_days.png)\n\nSpecify varying retention times for each schema to align with specific business needs. For instance, set a 7-day retention time for event in the \"Glovo integration\" schema, while events in the \"User's rights change history\" schema can be stored indefinitely. Adjust these settings dynamically as business requirements evolve.\n\n#### Granular Access Control with Tags\n\n![Tags](./assets/tags.png)\n![Member access by tags](./assets/tags_access.png)\n\nCreate and assign tags to schemas and users, enabling granular access control. Define access privileges based on tags, ensuring that users can only access the schemas and events relevant to their responsibilities. This feature provides an additional layer of security and customization in managing access to events data.\n\n## SDK\n\nMoonlogs provides Software Development Kits (SDKs) to simplify the integration process for various programming languages. Choose the SDK that matches your preferred language to quickly incorporate our functionality into your projects.\n\n#### Available SDKs\n\n- [Ruby SDK](https://github.com/pijng/moonlogs-ruby)\n- [Typescript SDK](https://github.com/pijng/moonlogs-ts)\n\n\n## Considerations\n\nMoonlogs is a specialized logging solution designed with a primary focus on capturing business event logs. It excels at providing insights into business processes, user interactions, and custom events tailored for your application.\n\n### When not to use moonlogs\n\nWhile moonlogs is powerful for business-event logging, there are specific scenarios where it might not be the best fit:\n\n**1. Auditing Logging**\n\nMoonlogs is not intended for exhaustive auditing purposes. If your requirement involves detailed audit logs for compliance or security, consider dedicated auditing tools like Datadog, SolarWinds, or other specialized solutions.\n\n**2. System Logs**\n\nMoonlogs is not designed to handle low-level system logs. For system-level monitoring and troubleshooting, solutions like ELK Stack or centralized logging systems may be more appropriate.\n\n**3. Application Performance Monitoring \u0026 Error Tracking**\n\nMoonlogs focuses on capturing business events and is not a substitute for dedicated Application Performance Monitoring (APM) or Error Tracking tools. For deep insights into application performance and error diagnostics, explore tools like New Relic, Dynatrace, Sentry, or similar APM solutions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpijng%2Fmoonlogs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpijng%2Fmoonlogs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpijng%2Fmoonlogs/lists"}