{"id":17005871,"url":"https://github.com/devatherock/jul-jsonformatter","last_synced_at":"2025-09-18T08:38:04.110Z","repository":{"id":37019430,"uuid":"59923349","full_name":"devatherock/jul-jsonformatter","owner":"devatherock","description":"Formatter to log java.util.logging(JUL) messages as JSON, compatible with Logstash","archived":false,"fork":false,"pushed_at":"2025-08-10T13:07:44.000Z","size":349,"stargazers_count":12,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-10T15:22:19.575Z","etag":null,"topics":["formatter","json","jul","jul-jsonformatter","logging","logstash"],"latest_commit_sha":null,"homepage":"https://bintray.com/devatherock/jul-jsonformatter/jul-jsonformatter","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/devatherock.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","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":"2016-05-29T02:41:57.000Z","updated_at":"2025-08-03T13:24:34.000Z","dependencies_parsed_at":"2023-02-18T22:46:02.920Z","dependency_job_id":"9d2cb702-51c5-43d9-8cb2-4ad733e1c83e","html_url":"https://github.com/devatherock/jul-jsonformatter","commit_stats":{"total_commits":260,"total_committers":6,"mean_commits":"43.333333333333336","dds":0.3192307692307692,"last_synced_commit":"d579dda6e65225cd03b7ea87e2bc64753a7c77b2"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/devatherock/jul-jsonformatter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devatherock%2Fjul-jsonformatter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devatherock%2Fjul-jsonformatter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devatherock%2Fjul-jsonformatter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devatherock%2Fjul-jsonformatter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devatherock","download_url":"https://codeload.github.com/devatherock/jul-jsonformatter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devatherock%2Fjul-jsonformatter/sbom","scorecard":{"id":336839,"data":{"date":"2025-08-11","repo":{"name":"github.com/devatherock/jul-jsonformatter","commit":"abf7ff91f0f12c00b7cbea3d7d1bf62cde85f630"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.9,"checks":[{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"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":-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":"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":"12 commit(s) and 0 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":"Code-Review","score":-1,"reason":"Found no human activity in the last 26 changesets","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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt: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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) 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-18T04:55:40.799Z","repository_id":37019430,"created_at":"2025-08-18T04:55:40.799Z","updated_at":"2025-08-18T04:55:40.799Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275736745,"owners_count":25519161,"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-09-18T02:00:09.552Z","response_time":77,"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":["formatter","json","jul","jul-jsonformatter","logging","logstash"],"created_at":"2024-10-14T05:04:22.125Z","updated_at":"2025-09-18T08:38:03.909Z","avatar_url":"https://github.com/devatherock.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CircleCI](https://img.shields.io/circleci/project/github/devatherock/jul-jsonformatter/master.svg)](https://app.circleci.com/pipelines/github/devatherock/jul-jsonformatter)\n[![Download](https://img.shields.io/maven-central/v/io.github.devatherock/jul-jsonformatter)](https://mvnrepository.com/artifact/io.github.devatherock/jul-jsonformatter)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=jul-jsonformatter\u0026metric=ncloc)](https://sonarcloud.io/dashboard?id=jul-jsonformatter)\n[![Coverage Status](https://coveralls.io/repos/github/devatherock/jul-jsonformatter/badge.svg?branch=master)](https://coveralls.io/github/devatherock/jul-jsonformatter?branch=master)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=jul-jsonformatter\u0026metric=bugs)](https://sonarcloud.io/dashboard?id=jul-jsonformatter)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=jul-jsonformatter\u0026metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=jul-jsonformatter)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n# jul-jsonformatter\n[Formatter](https://docs.oracle.com/javase/7/docs/api/java/util/logging/Formatter.html) to log `java.util.logging(JUL)` messages as JSON, compatible with [Logstash](https://www.elastic.co/products/logstash)\n\n## Usage\n- Include the dependency\n\nFor Maven:\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.devatherock\u003c/groupId\u003e\n    \u003cartifactId\u003ejul-jsonformatter\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nFor Gradle:\n```groovy\ncompile group: 'io.github.devatherock', name: 'jul-jsonformatter', version: '1.1.0'\n```\n\n- Include any one of [Gson](https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.5), [Jackson](https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.9.7) or [json-simple](https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple/1.1.1) libraries in classpath\n- Include a `logging.properties` file in classpath with `io.github.devatherock.json.formatter.JSONFormatter` as the formatter\n\n```\nhandlers=java.util.logging.ConsoleHandler\n\njava.util.logging.ConsoleHandler.level=INFO\njava.util.logging.ConsoleHandler.formatter=io.github.devatherock.json.formatter.JSONFormatter\n```\n\nThe path to the logging.properties file can also be passed as JVM arg \nlike `-Djava.util.logging.config.file=/path/to/logging.properties`\n\n## Change key names\n\nYou can change the key names using the configuration file `logging.properties`  \nThe following is an example with the default key names:\n\n```properties\nio.github.devatherock.json.formatter.JSONFormatter.key_timestamp=@timestamp\nio.github.devatherock.json.formatter.JSONFormatter.key_logger_name=logger_name\nio.github.devatherock.json.formatter.JSONFormatter.key_log_level=level\nio.github.devatherock.json.formatter.JSONFormatter.key_thread_name=thread_name\nio.github.devatherock.json.formatter.JSONFormatter.key_logger_class=class\nio.github.devatherock.json.formatter.JSONFormatter.key_logger_method=method\nio.github.devatherock.json.formatter.JSONFormatter.key_message=message\nio.github.devatherock.json.formatter.JSONFormatter.key_exception=exception\n```\n\n## Use slf4j log level names\n\n\nChange the log level names using the same mapping as [SLF4JBridgeHandler](http://www.slf4j.org/apidocs/org/slf4j/bridge/SLF4JBridgeHandler.html):\n\n```\nFINEST  -\u003e TRACE\nFINER   -\u003e DEBUG\nFINE    -\u003e DEBUG\nINFO    -\u003e INFO\nCONFIG  -\u003e CONFIG\nWARNING -\u003e WARN\nSEVERE  -\u003e ERROR\n```\n\nSet the following in the `logging.properties` file to change the log level names:\n\n```properties\nio.github.devatherock.json.formatter.JSONFormatter.use_slf4j_level_names=true\n```\n\n## Samples\n\nEach line in the generated log will be a JSON. Sample one line message:\n```json\n{\n    \"@timestamp\": \"2018-09-30T08:00:17.632-05:00\",\n    \"logger_name\": \"io.github.devatherock.json.formatter.helpers.GSONFormatterTest\",\n    \"level\": \"INFO\",\n    \"thread_name\": \"Test worker\",\n    \"class\": \"io.github.devatherock.json.formatter.helpers.GSONFormatterTest\",\n    \"method\": \"testSimpleMessage\",\n    \"message\": \"First message\"\n}\n```\n\nMulti-line message:\n```json\n{\n    \"@timestamp\": \"2018-09-30T08:00:17.654-05:00\",\n    \"logger_name\": \"io.github.devatherock.json.formatter.helpers.GSONFormatterTest\",\n    \"level\": \"INFO\",\n    \"thread_name\": \"Test worker\",\n    \"class\": \"io.github.devatherock.json.formatter.helpers.GSONFormatterTest\",\n    \"method\": \"testMessageWithNewLine\",\n    \"message\": \"Next message\\n\"\n}\n```\n\nMessage with exception:\n```json\n{\n    \"@timestamp\": \"2018-09-30T08:33:58.394-05:00\",\n    \"logger_name\": \"io.github.devatherock.json.formatter.helpers.GSONFormatterTest\",\n    \"level\": \"SEVERE\",\n    \"thread_name\": \"Test worker\",\n    \"class\": \"io.github.devatherock.json.formatter.helpers.GSONFormatterTest\",\n    \"method\": \"testMessageWithExceptionWithExceptionMessage\",\n    \"message\": \"Test message with exception\",\n    \"exception\": {\n        \"exception_class\": \"java.lang.RuntimeException\",\n        \"exception_message\": \"test exception\",\n        \"stack_trace\": \"java.lang.RuntimeException: test exception\\n\\tat com.devaprasadh.json.formatter.helpers.GSONFormatterTest.testMessageWithExceptionWithExceptionMessage(GSONFormatterTest.java:115)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\\n\\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n\\tat java.lang.reflect.Method.invoke(Method.java:498)\\n\\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)\\n\\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\\n\\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)\\n\\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\\n\\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)\\n\\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)\\n\\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)\\n\\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)\\n\\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)\\n\\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)\\n\\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)\\n\\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)\\n\\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)\\n\\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\\n\\tat org.junit.runners.ParentRunner.run(ParentRunner.java:363)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:106)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)\\n\\tat org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66)\\n\\tat org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\\n\\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n\\tat java.lang.reflect.Method.invoke(Method.java:498)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)\\n\\tat org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)\\n\\tat org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)\\n\\tat com.sun.proxy.$Proxy2.processTestClass(Unknown Source)\\n\\tat org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\\n\\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n\\tat java.lang.reflect.Method.invoke(Method.java:498)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)\\n\\tat org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)\\n\\tat org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)\\n\\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\\n\\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\\n\\tat org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)\\n\\tat java.lang.Thread.run(Thread.java:748)\\n\"\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevatherock%2Fjul-jsonformatter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevatherock%2Fjul-jsonformatter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevatherock%2Fjul-jsonformatter/lists"}