保護されたメソッドを「ハイジャック」して、Logger#forcedLog()
常にログに出力することができます。
ハイジャック犯クラスは、と同じパッケージに配置する必要がありますLogger
。
package org.apache.log4j;
/**
* @author maba, 2012-08-23
*/
public class LogOverride {
public static void print(Logger logger, String message) {
logger.forcedLog(logger.getName(), Priority.INFO, message, null);
}
}
そしてあなたの発信コードから
log.setLevel(Level.OFF); // Make sure logging is turned off
log.info("Normal logging"); // Will not be seen anywhere
LogOverride.print(log, "Overriding logger"); // Will still make it to your appender
これは、log4jFAQがカスタムレベルについて述べていることです。
カスタムレベルを追加するにはどうすればよいですか?
可能ですが、適切なことはめったにありません。リクエストは通常、「監査」のような名前のレベルで、「トレース」、「デバッグ」、「情報」、「警告」、「エラー」、「致命的」の進行に明らかに適合しません。その場合、レベルのリクエストは、実際には別のオーディエンスを指定するメカニズムのリクエストです。適切なメカニズムは、「監査」関連のメッセージに個別のロガー名(またはツリー)を使用することです。
したがって、その提案を採用したい場合は、SJuan76からの回答を確認する必要があります。