{"id":25181696,"url":"https://github.com/tkowalcz/tjahzi","last_synced_at":"2026-04-19T21:06:58.620Z","repository":{"id":40234565,"uuid":"294914423","full_name":"tkowalcz/tjahzi","owner":"tkowalcz","description":"Java clients, log4j2 and logback appenders for Grafana Loki","archived":false,"fork":false,"pushed_at":"2025-09-21T10:02:16.000Z","size":848,"stargazers_count":134,"open_issues_count":5,"forks_count":23,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-03-01T12:46:16.718Z","etag":null,"topics":["allocation-free","grafana-loki","java","log4j","log4j-appender","log4j1","log4j2","log4j2-appender","logback","logback-appender","logging","loki","protobuf","reload4j"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tkowalcz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"tkowalcz"}},"created_at":"2020-09-12T09:44:38.000Z","updated_at":"2026-02-26T00:10:14.000Z","dependencies_parsed_at":"2024-09-17T02:08:55.530Z","dependency_job_id":"927c48f5-1ac5-48dc-aa8c-fd2964beeb81","html_url":"https://github.com/tkowalcz/tjahzi","commit_stats":null,"previous_names":[],"tags_count":53,"template":false,"template_full_name":null,"purl":"pkg:github/tkowalcz/tjahzi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkowalcz%2Ftjahzi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkowalcz%2Ftjahzi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkowalcz%2Ftjahzi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkowalcz%2Ftjahzi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tkowalcz","download_url":"https://codeload.github.com/tkowalcz/tjahzi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkowalcz%2Ftjahzi/sbom","scorecard":{"id":889044,"data":{"date":"2025-08-11","repo":{"name":"github.com/tkowalcz/tjahzi","commit":"06bccdd1f01facfacda7e50bf522d8350bf65175"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 2/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":2,"reason":"8 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-389x-839f-4rhx","Warn: Project is vulnerable to: GHSA-4g8c-wm8x-jfhw","Warn: Project is vulnerable to: GHSA-4gg5-vx3j-xwc7","Warn: Project is vulnerable to: GHSA-735f-pc8j-v9w8","Warn: Project is vulnerable to: GHSA-77rm-9x9h-xj3g","Warn: Project is vulnerable to: GHSA-g5ww-5jh7-63cx","Warn: Project is vulnerable to: GHSA-h4h5-3hr4-j3g2","Warn: Project is vulnerable to: GHSA-wrvw-hg22-4m67"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T11:05:26.179Z","repository_id":40234565,"created_at":"2025-08-24T11:05:26.179Z","updated_at":"2025-08-24T11:05:26.179Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32022584,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"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":["allocation-free","grafana-loki","java","log4j","log4j-appender","log4j1","log4j2","log4j2-appender","logback","logback-appender","logging","loki","protobuf","reload4j"],"created_at":"2025-02-09T17:18:45.982Z","updated_at":"2026-04-19T21:06:58.609Z","avatar_url":"https://github.com/tkowalcz.png","language":"Java","funding_links":["https://github.com/sponsors/tkowalcz"],"categories":["日志库"],"sub_categories":[],"readme":"# About\n\n[Tjahzi](http://www.thorgal.com/personnages/tjahzi/) is a set of Java\ntools and appenders for sending logs\nto [Grafana Loki](https://grafana.com/oss/loki/).\n\n[![License: MIT](https://img.shields.io/github/license/tkowalcz/tjahzi?style=for-the-badge)](https://github.com/tkowalcz/tjahzi/blob/master/LICENSE)\n[![Last Commit](https://img.shields.io/github/last-commit/tkowalcz/tjahzi?style=for-the-badge)](https://github.com/tkowalcz/tjahzi/commits/master)\n[![CircleCI](https://img.shields.io/circleci/build/github/tkowalcz/tjahzi?style=for-the-badge)](https://app.circleci.com/pipelines/github/tkowalcz/tjahzi?branch=master)\n\nLatest releases:\n\n[![Maven Central](https://img.shields.io/maven-central/v/pl.tkowalcz.tjahzi/core.svg?label=Core\u0026style=for-the-badge)](https://search.maven.org/search?q=g:pl.tkowalcz.tjahzi)\n[![Maven Central](https://img.shields.io/maven-central/v/pl.tkowalcz.tjahzi/log4j2-appender.svg?label=Log4j2%20Appender\u0026style=for-the-badge)](https://search.maven.org/search?q=g:pl.tkowalcz.tjahzi)\n[![Maven Central](https://img.shields.io/maven-central/v/pl.tkowalcz.tjahzi/logback-appender.svg?label=Logback%20Appender\u0026style=for-the-badge)](https://search.maven.org/search?q=g:pl.tkowalcz.tjahzi)\n[![Maven Central](https://img.shields.io/maven-central/v/pl.tkowalcz.tjahzi/reload4j-appender.svg?label=reload4j%20Appender\u0026style=for-the-badge)](https://search.maven.org/search?q=g:pl.tkowalcz.tjahzi)\n\nIf you find the project useful (or not useful for some reason) please\nlet me know to encourage further development. ⭐ Stars are also welcome\n⭐ ;).\n\n## Features\n\nTjahzi allows pushing log data to Loki. It uses a protobuf format to\npush log lines with timestamps and labels. On top of that we\nbuilt appenders for `log4j2`, `Logback`, and `log4j1.x`/`reload4j`.\nThese feature:\n\n1. Logging does not allocate objects nor take any locks.\n1. Sending data to Loki in batches allocates as little as possible.\n1. We also provide a no-dependency version of these appenders.\n1. Includes in-house implementation of protobuf wire format for Loki to\n   reduce dependencies and improve performance.\n\nThese points apply to `log4j2` appender. `Logback` and `log4j1.x`\ndesigns do not allow allocation-free operation, but we go to great\nlengths to reduce allocations and even provide an optimized version of\nthe pattern layout for `Logback`.\n\n## Getting started\n\n#### Log4j2\n\nFor `log4j2` appender quick start guide and detailed discussions see\nthis [README.md](log4j2-appender/README.md).\n\n#### Logback\n\nFor `Logback` appender quick start guide and detailed discussions see\nthis [README.md](logback-appender/README.md).\n\n#### Log4j1.x / Reload4j\n\nFor appender quick start guide and detailed discussions see\nthis [README.md](reload4j-appender/README.md).\n\n\u003e The `log4j1.x` was discontinued by the Apache Foundation and is no\n\u003e longer updated.\n\u003e The [Reload4j](https://github.com/qos-ch/reload4j) project is a drop\n\u003e in replacement for `log4j1.x` which fixes \"the most pressing security\n\u003e issues\".\n\u003e\n\u003e The `log4j.jar` is interchangeable with `reload4j.jar` and you can\n\u003e freely use `reload4j`\n\u003e appender even if you use old `log4j1.x`.\n\n## Core design principles\n\nLogging should be lightweight and not interfere with the main business\ntasks of threads that happen to log a message.\nAsking the logging subsystem to log a message should be as CPU efficient\nas possible.\nThat's a truism. Apart from computation itself, there are many other\ncauses of jitter (varying speed of code execution).\nThread can be slowed down by excessive allocations, by initialization\ncode running in constructors of unnecessarily allocated objects,\nby garbage collector activity that is triggered by it. There can be\nconfiguration refresh checks on logging path, inter-thread signaling,\netc.\n\nTo avoid these effects, we strive to adhere to the following\nprinciples (and document any violations):\n\n1. Lock free and wait free API\n2. Allocation free in a steady state\n\nYou can compare this\nwith [design principles of Aeron](https://github.com/real-logic/aeron/wiki/Design-Principles)\nwhich are close to our hearts.\n\n## Architecture\n\n```\n                [via 10kB thread local buffer]\n                           │                                          \n┌─────────────┐    Log  ←──┘                                                \n│ Application │----------------┐                                          \n│  Thread 1   │                │                                          \n└─────────────┘                │                                          \n                               │                                          \n       .                       ▼                                          \n                          ┌────────────────────┐         ┌─────────┐         ┌─────────┐\n       .      Log         │                    │         │ Log     │         │  I/O    │\n         ----------------▶│     Log buffer     ├--→---→--┤ shipper ├--→---→--┤ thread  │      \n       .                  │                    │         │ agent   │         │ (Netty) │    \n                          └────────────────────┘         └─────────┘         └─────────┘    \n       .                             ▲                                    \n                                     │                                    \n┌─────────────┐      Log             │                                    \n│ Application │----------------------┘                                    \n│  Thread N   │                                                           \n└─────────────┘                                                           \n```\n\nFor those interested, the wiki contains some information\non [log buffer sizing](https://github.com/tkowalcz/tjahzi/wiki/Log-buffer-sizing).\n\n## Monitoring\n\nCheck\nout [this wiki article](https://github.com/tkowalcz/tjahzi/wiki/Monitoring).\n\n# LICENSE\n\nThis work is released under MIT license. Feel free to use, copy and\nmodify this work as long as you credit original authors.\nPull and feature requests are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkowalcz%2Ftjahzi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftkowalcz%2Ftjahzi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkowalcz%2Ftjahzi/lists"}