{"id":25549542,"url":"https://github.com/ashutoshiwnl/exceptionbuddy","last_synced_at":"2025-08-20T06:15:11.479Z","repository":{"id":278165456,"uuid":"932293678","full_name":"AshutoshIWNL/ExceptionBuddy","owner":"AshutoshIWNL","description":"A Java agent for comprehensive exception monitoring and logging. Captures all JVM exceptions, including caught and suppressed ones, through non-invasive bytecode instrumentation.","archived":false,"fork":false,"pushed_at":"2025-03-01T11:45:29.000Z","size":54,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-30T17:40:07.080Z","etag":null,"topics":["bytecode-manipulation","exception-reporting","java-agent"],"latest_commit_sha":null,"homepage":"","language":"Java","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/AshutoshIWNL.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":"2025-02-13T17:21:23.000Z","updated_at":"2025-03-17T17:22:55.000Z","dependencies_parsed_at":"2025-02-25T16:21:13.393Z","dependency_job_id":null,"html_url":"https://github.com/AshutoshIWNL/ExceptionBuddy","commit_stats":null,"previous_names":["ashutoshiwnl/exceptionbuddy"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/AshutoshIWNL/ExceptionBuddy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AshutoshIWNL%2FExceptionBuddy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AshutoshIWNL%2FExceptionBuddy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AshutoshIWNL%2FExceptionBuddy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AshutoshIWNL%2FExceptionBuddy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AshutoshIWNL","download_url":"https://codeload.github.com/AshutoshIWNL/ExceptionBuddy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AshutoshIWNL%2FExceptionBuddy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271274275,"owners_count":24730982,"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-08-20T02:00:09.606Z","response_time":69,"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":["bytecode-manipulation","exception-reporting","java-agent"],"created_at":"2025-02-20T10:18:36.331Z","updated_at":"2025-08-20T06:15:11.465Z","avatar_url":"https://github.com/AshutoshIWNL.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ExceptionBuddy\n\nExceptionBuddy is a powerful Java agent that provides comprehensive exception monitoring and logging capabilities by instrumenting Java's exception handling at runtime. It captures all exceptions that occur within the JVM, including those that are caught and suppressed, making it an invaluable tool for debugging and monitoring Java applications.\n\n## Features\n\n- **Complete Exception Capture**: Captures all exceptions in the JVM, including caught, suppressed, and initialization errors\n- **Non-invasive Implementation**: Works without modifying your application code through Java instrumentation\n- **Configurable Filtering**: Support for custom exception filters to focus on exceptions that are invoked from interested classes\n- **Detailed Class Loading Tracing**: Optional tracing of class loader hierarchies for debugging class loading issues\n- **Low Overhead**: Minimal performance impact on your running application\n- **Runtime Exception Monitoring**: Real-time monitoring of exception patterns and frequencies\n- **Runtime Attach**: Supports attach at Runtime through Attach API\n- **JVM System Properties**: Supports printing JVM system properties\n- **Environment Variables**: Supports printing Environment variables\n\n## How It Works\n\nExceptionBuddy uses the Java Instrumentation API to modify the bytecode of `java.lang.Throwable` at runtime. By instrumenting the base class of all exceptions, it ensures that every exception instance, regardless of where or how it occurs, is captured and logged. This approach provides several advantages:\n\n- Catches exceptions before they're caught by application code\n- Records exceptions that might be suppressed or swallowed\n- Maintains a complete audit trail of exception occurrences\n\n## Getting Started\n\n### Prerequisites\n\n- Java 8 or higher\n- A Java application you want to monitor\n\n### Installation\n\n1. Download the latest ExceptionBuddy JAR from the releases page\n2. Add the agent to your Java command line:\n\n```bash\njava -javaagent:C:\\tools\\ExceptionBuddy-1.0-SNAPSHOT.jar=configurationFile=C:\\tools\\ebConfig.json -jar your-application.jar\n```\n\n### Configuration\n\nCreate a `ebConfig.json` file with your desired settings:\n\n```properties\nuseFilters: Whether to use the filters to limit the exceptions that are dumped - (true/false)\nfilters: Define what filters to use - (org.apache.log4j)\nlogFilePath: Path of the log file that the agent will use - (C:\\\\eb.log)\nclassLoadTracing: Prints classloading information - (true/false)\nexceptionMonitoring: Prints exception statistics every 60 seconds - (true/false)\ncnfSkipString: This is a special property which helps avoid false positve ClassNotFoundExceptions and is JDK version dependent - (java.lang.ClassLoader.loadClass(ClassLoader.java:411))\n\"printJVMSysProps\" : Prints current JVM system properties - (true/false)\n\"printEnvironmentVariables\": Prints environment variables picked up by the JVM - (true/false)\n```\n\nExample:\n```properties\n{\n  \"useFilters\": true,\n  \"filters\": [\n    \"org.apache.logging.log4j\"\n  ],\n  \"logFilePath\": \"C:\\\\tools\\\\eb.log\",\n  \"classLoaderTracing\" : true,\n  \"exceptionMonitoring\" : false,\n  \"cnfSkipString\" : \"java.lang.ClassLoader.loadClass(ClassLoader.java:406)\",\n  \"printJVMSysProps\" : true,\n  \"printEnvironmentVariables\": true\n}\n```\n\n## Building from Source\n\n```bash\ngit clone https://github.com/AshutoshIWNL/ExceptionBuddy.git\ncd ExceptionBuddy\nmvn clean package\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.\n\n\n## Author\n\nAshutosh Mishra 【=◈︿◈=】\n\n## Support and Feedback\n\n- Create an issue for bug reports or feature requests\n- For general questions, please use the Discussions tab\n\n## Acknowledgments\n\n- Special thanks to the Javassist team for their excellent bytecode manipulation library\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashutoshiwnl%2Fexceptionbuddy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fashutoshiwnl%2Fexceptionbuddy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashutoshiwnl%2Fexceptionbuddy/lists"}