プログラムでLog4jにAppenderを追加/削除できます。
ConsoleAppender console = new ConsoleAppender(); //create appender
//configure the appender
String PATTERN = "%d [%p|%c|%C{1}] %m%n";
console.setLayout(new PatternLayout(PATTERN));
console.setThreshold(Level.FATAL);
console.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(console);
FileAppender fa = new FileAppender();
fa.setName("FileLogger");
fa.setFile("mylog.log");
fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(fa);
//repeat with all other desired appenders
これがどこかで確実に実行されるinit()のどこかに置くことをお勧めします。次に、ルートロガー上のすべての既存のアペンダーを削除できます
Logger.getRootLogger().getLoggerRepository().resetConfiguration();
独自のものを追加することから始めます。もちろん、これを機能させるには、クラスパスにlog4jが必要です。
備考:
あなたはどの取ることができLogger.getLogger(...)
、あなたがアペンダを追加したいです。ルートロガーはすべての最下部にあり、他のカテゴリの他のアペンダーを介して渡されるすべてを処理するので、ルートロガーを取得しました(追加フラグを設定して構成されていない限り)。
ロギングの仕組みと、ログの書き込み場所がどのように決定されているかを知る必要がある場合は、このマニュアルで詳細を確認してください。
要するに:
Logger fizz = LoggerFactory.getLogger("com.fizz")
カテゴリ「com.fizz」のロガーを提供します。
上記の例の場合、これは、ログに記録されたすべてのものがコンソールとルートロガーのファイルアペンダーに参照されることを意味します。
Logger.getLogger( "com.fizz")。addAppender(newAppender)にアペンダーを追加した場合、ロギングfizz
はルートロガーとのすべてのアペンダーによって処理されnewAppender
ます。
ロガーを構成で作成するのではなく、システムで可能なすべてのカテゴリのハンドラーを提供するだけです。