Ich arbeite in einem Projekt, das Log4J verwendet. Eine der Anforderungen besteht darin, für jeden Thread eine separate Protokolldatei zu erstellen. Das war ein seltsames Problem, etwas sortiert, indem ein neuer FileAppender im laufenden Betrieb erstellt und an die Logger-Instanz angehängt wurde.Log4J - SiftingAppender-ähnliche Funktionalität
Logger logger = Logger.getLogger(<thread dependent string>);
FileAppender appender = new FileAppender();
appender.setFile(fileName);
appender.setLayout(new PatternLayout(lp.getPattern()));
appender.setName(<thread dependent string>);
appender.setThreshold(Level.DEBUG);
appender.activateOptions();
logger.addAppender(appender);
Alles ging gut, bis wir, dass eine andere Bibliothek realisiert wir verwenden - Spring Framework v3.0.0 (die Verwendung Commons Logging) - Ball nicht mit der Technik, die oben spielen - das Frühlingsprotokolldaten nur initialisiert durch Appen „gesehen“ wird aus der log4.configuration-Datei, aber nicht von der Runtime erstellt Appenders. Also, zurück zu Platz eins.
Nach einigen Untersuchungen fand ich heraus, dass die neue und verbesserte LogBack einen Appender hat - SiftingAppender - die genau das tut, was wir brauchen, das Thread-Level-Protokollierung auf unabhängige Dateien.
Im Moment ist der Wechsel zu LogBack keine Option. Wie kann ich also mit SiftingAppender-ähnlichen Funktionen arbeiten und den Frühling glücklich machen?
Hinweis: Feder wird nur für JdbcTemplate Funktionalität verwendet, kein IOC; um Log4J zu „Haken“ Spring Commons Logging habe ich diese Zeile in der Datei log4j.properties:
log4j.logger.org.springframework = DEBUG
wie angewiesen here.
Wenn Sie nur Spring für die jdbc-Funktionalität verwenden, sollten Sie stattdessen etwas wie Apache commons-dbutils verwenden. –