Log4J - SiftingAppender-ähnliche Funktionalität

Ich arbeite in einem Projekt, das verwendetLog4J. Eine der Anforderungen besteht darin, für jeden Thread eine separate Protokolldatei zu erstellen. Dies selbst war ein seltsames Problem, das dadurch gelöst wurde, dass ein neuer FileAppender im laufenden Betrieb erstellt und an die Logger-Instanz angehängt wurde.

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 lief gut, bis wir merkten, dass wir eine andere Bibliothek benutzen -Spring Framework v3.0.0 (welche verwendenCommons Logging) - spielt mit der obigen Technik keinen Ball - die Spring-Protokolldaten werden nur von Appendern "gesehen", die aus der log4.configuration-Datei initialisiert wurden, aber nicht von den zur Laufzeit erstellten Appendern. Also zurück zu Punkt eins.

Nach einigen Nachforschungen fand ich heraus, dass sich das neue und verbesserteWieder anmelden hat einen Appender -SiebenAppender - der genau das tut, was wir brauchen, d. H. Die Protokollierung auf Thread-Ebene für unabhängige Dateien.

Im Moment ist der Umstieg auf LogBack keine Option. Wie kann ich, da ich mit Log4J nicht weiterkomme, die SiftingAppender-ähnliche Funktionalität erreichen und auch Spring glücklich machen?

Hinweis: Die Feder wird nur für verwendetJdbcTemplate Funktionalität, kein IOC; Um Spring's Commons Logging in Log4J zu integrieren, habe ich diese Zeile in die Datei log4j.properties eingefügt:

log4j.logger.org.springframework = DEBUG

wie angewiesenHier.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage