What problem does it solve? Java projects often scatter printStackTrace, System.out, and System.err calls that lose error output when the app runs without a terminal (e.g., a packaged .exe), and inconsistent logger usage makes exceptions lose their stack traces. This Skill configures or standardizes Log4j 2 logging so every exception is logged with its Throwable preserved and no sensitive data leaks into logs. ## Core Features & Use Cases - Migrate ad-hoc output to proper logging: Replace printStackTrace, System.out, and System.err with logger calls that always pass the Throwable as the last argument. - Mirror the project's existing convention: Detect whether the project uses a per-class Logger via LogManager.getLogger or a single facade class, and follow that pattern instead of imposing a foreign one. - Configure log4j2.xml: Set up or adjust RollingFile appenders, rotation, and retention by copying real values from the existing config, or declare assumptions explicitly on greenfield projects. - Use Case: A desktop Java app packaged as an .exe silently swallows errors because exceptions go to printStackTrace. This Skill migrates those calls to the project's Log facade, verifies zero remaining print statements via grep, and confirms the build passes. ## Quick Start Use the java-logging-log4j2 skill to replace all printStackTrace and System.out calls in this project with proper Log4j 2 logger calls following the project's existing logging pattern.