Log4Jを使用するプロジェクトで作業しています。要件の 1 つは、スレッドごとに個別のログ ファイルを作成することです。これ自体は奇妙な問題であり、その場で新しい FileAppender を作成し、それを Logger インスタンスにアタッチすることによって、多少ソートされました。
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);
私たちが使用する別のライブラリ - Spring Framework v3.0.0 ( Commons Loggingを使用) - が上記の手法でうまくいかないことに気付くまで、すべてがうまくいきました。ファイルではなく、ランタイムによって作成されたアペンダーによって。では、振り出しに戻ります。
調査の結果、新しく改善されたLogBackにはアペンダー(SiftingAppender) があることがわかりました。これは、独立したファイルでのスレッド レベルのログ記録など、必要なことを正確に実行します。
現時点では、LogBack への移行はオプションではないため、Log4J に固執している場合、SiftingAppender のような機能を実現し、Spring を満足させるにはどうすればよいでしょうか?
注: Spring はJdbcTemplate機能にのみ使用され、IOC には使用されません。Spring の Commons Logging を Log4J に「フック」するために、次の行を log4j.properties ファイルに追加しました。
log4j.logger.org.springframework=DEBUG
ここで指示されているとおり。