{"id":19252031,"url":"https://github.com/rkonovalov/advancedlogger","last_synced_at":"2026-06-15T04:31:34.738Z","repository":{"id":57722421,"uuid":"153137766","full_name":"rkonovalov/advancedlogger","owner":"rkonovalov","description":"Advanced logger expands features of standard Log4J logger","archived":false,"fork":false,"pushed_at":"2019-05-03T01:25:01.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-04T23:07:36.428Z","etag":null,"topics":["java","java-log4j","logger","logging"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rkonovalov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-15T15:30:37.000Z","updated_at":"2019-08-21T15:04:46.000Z","dependencies_parsed_at":"2022-08-29T23:01:59.640Z","dependency_job_id":null,"html_url":"https://github.com/rkonovalov/advancedlogger","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rkonovalov/advancedlogger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkonovalov%2Fadvancedlogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkonovalov%2Fadvancedlogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkonovalov%2Fadvancedlogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkonovalov%2Fadvancedlogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rkonovalov","download_url":"https://codeload.github.com/rkonovalov/advancedlogger/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkonovalov%2Fadvancedlogger/sbom","scorecard":{"id":778321,"data":{"date":"2025-08-11","repo":{"name":"github.com/rkonovalov/advancedlogger","commit":"791ee185532f22e1fa5ee243d53000800945e07a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/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":"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":"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":"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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"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":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-2qrg-x229-3v8q","Warn: Project is vulnerable to: GHSA-65fg-84f6-3jq3","Warn: Project is vulnerable to: GHSA-f7vh-qwp3-x37m","Warn: Project is vulnerable to: GHSA-fp5r-v3w9-4333","Warn: Project is vulnerable to: GHSA-w9p3-5cr8-m3jj"],"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-23T04:13:29.784Z","repository_id":57722421,"created_at":"2025-08-23T04:13:29.784Z","updated_at":"2025-08-23T04:13:29.784Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34348291,"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-06-15T02:00:07.085Z","response_time":63,"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":["java","java-log4j","logger","logging"],"created_at":"2024-11-09T18:25:03.482Z","updated_at":"2026-06-15T04:31:34.722Z","avatar_url":"https://github.com/rkonovalov.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://rkonovalov.github.io/projects/advancedlogger/1.0.0/\"\u003e\n    \u003cimg src=\"https://rkonovalov.github.io/assets/images/advancedlogger-logo.svg\" alt=\"AdvancedLogger main page\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n\u003c/div\u003e\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Build Status](https://travis-ci.org/rkonovalov/advancedlogger.svg?branch=master)](https://travis-ci.org/rkonovalov/advancedlogger)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.rkonovalov/advancedlogger/badge.svg?style=blue)](https://maven-badges.herokuapp.com/maven-central/com.github.rkonovalov/advancedlogger/)\n[![Javadocs](http://www.javadoc.io/badge/com.github.rkonovalov/advancedlogger.svg?1.2)](http://www.javadoc.io/doc/com.github.rkonovalov/advancedlogger)\n[![codecov](https://codecov.io/gh/rkonovalov/advancedlogger/branch/master/graph/badge.svg)](https://codecov.io/gh/rkonovalov/advancedlogger)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/1b6c7b16e7014f3e9038a8cf18a676a1)](https://www.codacy.com/app/rkonovalov/advancedlogger?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=rkonovalov/advancedlogger\u0026amp;utm_campaign=Badge_Grade)\n\n# Advanced logger\nAdvanced logger expands features of standard Log4J logger\n\n# Getting started\nFor using this module you need to follow for next steps\n\n## Importing dependency\nIf you are using Maven you need add next dependency\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.rkonovalov\u003c/groupId\u003e\n  \u003cartifactId\u003eadvancedlogger\u003c/artifactId\u003e\n  \u003cversion\u003e1.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\nIf you are using another build automation tool, you can find configuration string by this URL:\nhttps://search.maven.org/artifact/com.github.rkonovalov/advancedlogger/1.2/jar\n\n# Description\nUsually when are you using Log4J logging you should to use next code\n```java\npublic class Example {\n    private static final Logger logger = Logger.getLogger(Example.class);\n\n    public static void main(String[] args) {\n        \n        logger.info(\"Application started\");\n        //Do some stuff....\n        logger.info(\"Application ended\");\n    }\n}\n```\n\nBut sometimes, specifically in high load applications, we should to use next code\n```java\npublic class Example {\n    private static final Logger logger = Logger.getLogger(Example.class);\n\n    public static void main(String[] args) {\n        \n         if(logger.isInfoEnabled())\n             logger.info(\"Application started\");\n                \n         //Do some stuff....\n         if(logger.isDebugEnabled())\n             logger.debug(\"Some debug message\");\n        \n         \n         try {            \n             //Do some stuff\n              logger.info(\"Some message\");\n              } catch (Exception e) {\n                if(logger.isErrorEnabled())\n                    logger.error(\"Some error\", e);\n              }  \n              \n        \n         //Do some stuff....\n         //Logging multiple messages\n           if(logger.isInfoEnabled()) {\n               logger.info(\"First message\"); \n               logger.info(\"Second message\"); \n               logger.info(\"Third message\");                \n           }\n           \n           //Or logging multiple messages as one\n           if(logger.isInfoEnabled()) {\n               logger.info(\"First message\" + \"Second message\" + \"Third message\"); \n           }\n    }\n}\n```\nEvery time we need to check that some log level is enabled. And we are forced to write some excessive code.\n\nAdvancedLogger Intended to solve this problems. It auto checks log level before call log function. If log level is not enabled AdvancedLogger won't to call log function.\n\n## Examples\nIn the next example you can see typical initialization and usage of AdvancedLogger\n\n### Initialization\n```java\npublic class Example {\n    private static final AdvancedLogger logger = AdvancedLogger.getLogger(Example.class);\n\n    public static void main(String[] args) {\n        \n        logger.info(() -\u003e \"Application started\");//No need to check log level anymore\n        //Do some stuff....\n        logger.info(() -\u003e \"Application ended\");\n    }\n}\n```\n\n### Log simple messages\n```java\npublic class Example {\n    private static final AdvancedLogger logger = AdvancedLogger.getLogger(Example.class);\n\n    public static void main(String[] args) {\n        \n        //Log info string\n        logger.info(() -\u003e \"Hello\");\n        \n        //Log info strings\n        logger.info(() -\u003e \"First message\", () -\u003e \"Second message\", () -\u003e \"Third message\");\n        \n        //Or\n        logger.info(() -\u003e \"First message\")\n              .info(() -\u003e \"Second message\")\n              .info(() -\u003e \"Third message\");\n        \n        //Log in different log levels\n        logger.info(() -\u003e \"Info message\") //calls info log if INFO level is enabled\n                .debug(() -\u003e \"Debug message\") //calls debug log if DEBUG level is enabled\n                .error(() -\u003e \"Error message\"); //calls error log if ERROR level is enabled\n       \n    }\n}\n```\n\n### Log throwable messages\n```java\npublic class Example {\n    private static final AdvancedLogger logger = AdvancedLogger.getLogger(Example.class);\n\n    public static void main(String[] args) {\n        \n        //Log error message\n        logger.error(() -\u003e new ThrowableObject(\"Some error\", new RuntimeException())); \n        \n    }\n}\n```\n\n### Log static events\n```java\npublic class Example {\n    private static final AdvancedLogger logger = AdvancedLogger.getLogger(Example.class);\n    private static final LoggerEvent currentTime = () -\u003e \"Current time: \" + new Date().toString();\n\n    public static void main(String[] args) {\n        \n        //Log info current time\n        logger.info(currentTime);\n        \n        //Do some stuff\n        \n        //Log info current time\n        logger.info(currentTime);\n    }\n}\n```\n\n#### Result\n```text\n2018-10-15 12:09:31.271 INFO [main] Example Current time: Mon Oct 15 12:09:31 EDT 2018\n...\n...\n2018-10-15 12:09:31.271 INFO [main] Example Current time: Mon Oct 15 12:09:32 EDT 2018\n```\n\n### Packet logging\nIf the log process takes a lot of time, you can use packet logging\n```java\npublic class Example {\n    private static final AdvancedLogger logger = AdvancedLogger.getLogger(Example.class);\n    private static final LoggerEvent currentTime = () -\u003e \"Current time: \" + new Date().toString();\n\n    public static void main(String[] args) {\n        \n        //Start packet logging. All next log events will be added in event queue\n        logger.startPacket();\n        \n        //Log info current time\n        logger.info(currentTime);\n        \n        //Do some stuff\n        //...\n        \n        //Log info current time\n        logger.info(currentTime);\n        \n        //Stop packet logging. Print all log events from event queue\n        logger.stopPacket();\n    }\n}\n```\n#### Result\n```text\n...\n2018-10-15 12:09:31.271 INFO [main] Example Current time: Mon Oct 15 12:09:32 EDT 2018\n2018-10-15 12:09:31.271 INFO [main] Example Current time: Mon Oct 15 12:09:32 EDT 2018\n```\n\n### Packet logging in time critical mode\nBy default packet logging in non critical time mode, \nthat means result from log event will be gotten and printed when logger stopped packet logging by using logger.stopPacket() call\n\nBut sometimes we need get result from event at same time when event will be added to event queue. \nThus wee need to change packet logging mode to time critical. Next example illustrates how we can do it\n```java\npublic class Example {\n    private static final AdvancedLogger logger = AdvancedLogger.getLogger(Example.class);\n    private static final LoggerEvent currentTime = () -\u003e \"Current time: \" + new Date().toString();\n\n    public static void main(String[] args) {\n        \n        //Start packet logging in critical time mode. All next log events will be added in event queue\n        //and all event results will be gotten at same time when it added in queue\n        logger.startPacket(PacketType.CRITICAL);\n        \n        //Log info current time\n        logger.info(currentTime);\n        \n        //Do some stuff\n        //...\n        \n        //Log info current time\n        logger.info(currentTime);\n        \n        //Stop packet logging. Print all log events from event queue\n        //logger will print already gotten event results\n        logger.stopPacket();\n    }\n}\n```\n\n# Release notes\n\n**Version 1.2**\n* Added static initialization\n* Fixed bugs\n\n**Version 1.1**\n* Added packet logging\n\n**Version 1.0**\n* Initial release\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frkonovalov%2Fadvancedlogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frkonovalov%2Fadvancedlogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frkonovalov%2Fadvancedlogger/lists"}