{"id":37030311,"url":"https://github.com/hseeberger/log4scala","last_synced_at":"2026-01-14T03:41:37.948Z","repository":{"id":55575761,"uuid":"323156851","full_name":"hseeberger/log4scala","owner":"hseeberger","description":"Scala 3 sugar for logging","archived":true,"fork":false,"pushed_at":"2020-12-23T11:29:13.000Z","size":29,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-19T22:22:20.976Z","etag":null,"topics":["logging","scala"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/hseeberger.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}},"created_at":"2020-12-20T20:16:19.000Z","updated_at":"2023-01-28T08:53:05.000Z","dependencies_parsed_at":"2022-08-15T03:30:46.337Z","dependency_job_id":null,"html_url":"https://github.com/hseeberger/log4scala","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/hseeberger/log4scala","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hseeberger%2Flog4scala","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hseeberger%2Flog4scala/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hseeberger%2Flog4scala/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hseeberger%2Flog4scala/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hseeberger","download_url":"https://codeload.github.com/hseeberger/log4scala/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hseeberger%2Flog4scala/sbom","scorecard":{"id":470735,"data":{"date":"2025-08-11","repo":{"name":"github.com/hseeberger/log4scala","commit":"f7fdf6b827a4ba132cbe3d85ad7f746fb253c24a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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 0/12 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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/hseeberger/log4scala/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/hseeberger/log4scala/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/hseeberger/log4scala/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/hseeberger/log4scala/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/hseeberger/log4scala/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/hseeberger/log4scala/test.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: 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":"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 'main'"],"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 2 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"}}]},"last_synced_at":"2025-08-19T13:50:38.672Z","repository_id":55575761,"created_at":"2025-08-19T13:50:38.672Z","updated_at":"2025-08-19T13:50:38.672Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408856,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"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":["logging","scala"],"created_at":"2026-01-14T03:41:37.307Z","updated_at":"2026-01-14T03:41:37.929Z","avatar_url":"https://github.com/hseeberger.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# log4scala #\n\n![Build](https://img.shields.io/github/workflow/status/hseeberger/log4scala/Test)\n![Maven Central](https://img.shields.io/maven-central/v/rocks.heikoseeberger/log4scala)\n\nlog4scala is a library providing convenient and performant logging for Scala 3. It piggybacks on\n[Apache Logj4 2](https://logging.apache.org/log4j/2.x) (but you could use other backends like\n[Logback](http://logback.qos.ch/)) and it automagically applies the check-enabled-idiom thanks to\nScala 3 metaprogramming.\n\nIn a nutshell, you can invoke logging methods like `info` without checking if the respective log\nlevel is enabled, because that is handled for you by the compiler:\n\n``` scala\ndef expensive() = ??? // Very expensive construction of \"expensive\"\nval logger = Logger(getClass)\nlogger.info(s\"I am an $expensive log message ;-)\")\n```\n\nThe compiler will – more or less – create the following code for you:\n\n``` scala\n...\n// maybeCreateMessage() would return something like \"I am an $expensive log message ;-)\"\nif (logger.isInfoEnabled) logger.info(maybeCreateMessage())\n```\n\nSo if the respective log level is not enabled, the potentially expensive construction of the log\nmessage will not happen, even though you do not have to spend any efforts on that.\n\nFurther log4scala makes it easy to work with context maps (a.k.a. MDCs):\n\n``` scala\nwithContextMap(\"key1\" -\u003e \"value1\", \"key2\" -\u003e \"value2\") {\n  logger.info(\"Some message\")\n  ...\n  logger.info(\"Some other message\")\n}\n```\n\nThe `withContextMap` method takes one or more key-value-pairs and a block of code. Within that block\nthe key-value-pairs are put on the current context and removed afterwards even in the case of an\nexception. It also nicely integrates with Log4j Thread Context Maps and SLF4J MDCs.\n\nlog4scala is inspired by:\n- [Scala Logging](https://github.com/lightbend/scala-logging)\n- [Log4j](https://github.com/Log4s/log4s)\n- [Scala 3 / Dotty docs](http://dotty.epfl.ch/docs/reference/metaprogramming/inline.html)\n\n## Contribution policy ##\n\nContributions via GitHub pull requests are gladly accepted from their original author. Along with\nany pull requests, please state that the contribution is your original work and that you license\nthe work to the project under the project's open source license. Whether or not you state this\nexplicitly, by submitting any copyrighted material via pull request, email, or other means you\nagree to license the material under the project's open source license and warrant that you have the\nlegal authority to do so.\n\n## License ##\n\nThis code is open source software licensed under the\n[Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhseeberger%2Flog4scala","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhseeberger%2Flog4scala","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhseeberger%2Flog4scala/lists"}