StackOverflow コミュニティの皆様、こんにちは。
log4j を使用して各スレッドのログ ファイル出力が必要なマルチスレッド アプリケーションを作成しています。理想的には、スレッドごとに個別のログ インスタンスを実行したいと考えています。これにどう立ち向かうべきか議論中です。ログ インスタンスごとにファイル出力の場所が異なるため、インスタンスlog4j.appender.BrokerFile.File=
ごとにプロパティを更新する必要があります。現在、新しい Logger を作成し、新しいプロパティをプロパティ オブジェクトに設定し、新しいプロパティを新しく作成した Logger オブジェクトにロードしようとしています。PropertyConfigurator.configure(log4jProperties);
新しい Logger インスタンスは問題なく作成されていますが、新しいプロパティは新しいインスタンスによって認識されるようです。新しい Logger インスタンスごとに新しい FileAppender を作成する必要がありますか?
public class Broker implements Runnable{
private Settings ss; //The Settings object associated with this broker.
private String loggerName = null;
private Logger log = null;
private Properties log4jProperties = new Properties();
}
//Constructor
public Broker(Settings ss){
this.ss = ss;
}
public void run() {
loggerName = ss.getBrokerName() + "_Logger";
log = Logger.getLogger(loggerName);
log4jProperties.setProperty("log4j.loggerName", "DEBUG, FILE");
log4jProperties.setProperty("log4j.appender.FILE","org.apache.log4j.FileAppender");
log4jProperties.setProperty("log4j.appender.FILE.File", "C:/Logz/"+loggerName+".out");
log4jProperties.setProperty("log4j.appender.FILE.ImmediateFlush", "true");
log4jProperties.setProperty("log4j.appender.FILE.Threshold", "DEBUG");
log4jProperties.setProperty("log4j.appender.FILE.Append", "FALSE");
log4jProperties.setProperty("log4j.appender.FILE.layout", "org.apache.log4j.PatternLayout");
log4jProperties.setProperty("log4j.appender.FILE.layout.conversionPattern", "%m%n");
PropertyConfigurator.configure(log4jProperties);
log.debug("This is a debug message");
// This will be set to true as long as the Broker is running
while(isRunnable){
//Listen for and process files
}
}
これがコンソール出力です。ご覧のとおり、新しいロガー インスタンスが作成されていますが、新しいプロパティは認識されていません。
log4j:WARN No appenders could be found for logger (Broker1_Logger).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN No appenders could be found for logger (Broker2_Logger).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN No appenders could be found for logger (Broker3_Logger).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
これはすべてのブローカーに当てはまります。構成設定を Logger オブジェクトに直接適用する方法はありますか? たとえば、 log .PropertyConfigurator.configure(log4jproperties);のようなものです。作成された各ロガー オブジェクトに構成設定を適用する方法が必要です。
ありがとうございました、
ジム