2017-11-17 2 views
1

私はロガーを特定の情報のみが表示されるように使用したいと思います。私のシステムではすでにいくつかのアペンダーが使用されていますが、レベル別にフィルタリングされずにロギング中に明示的に処理される追加のものが必要です。明示的にlog4のアペンダを扱います

<appender-ref ref="FILE"/> 
<appender-ref ref="CONSOLE"/> 
<appender-ref ref="SPECIAL"/> 

「SPECIAL」アペンダーが必要なログを作成します。アペンダを明示的に扱うことが可能であり、標準的なロギングエントリはこれに対して抑制されるべきです。私は

logger.getAppender("SPECIAL").log("my special log info"); 

答えて

0

必要なもの

例私はあなたの最善のアプローチは、マーカーのいくつかの種類に基づいてログメッセージをフィルタリングするためにStringMatchFilterを使用することであることを示唆しています。ここで

import org.apache.log4j.Logger; 

public class Example1 { 
    private static final Logger logger = Logger.getLogger(Example1.class); 
    // This should probably go into a general purpose constants class of some kind 
    // but for simplicity of this example it's in here. 
    private static final String SPECIAL_MARKER = "SPECIAL"; 

    public static void main(String[] args){ 
     logger.debug("debug from my.Example1"); 
     logger.info("info from my.Example1"); 
     logger.warn("warning from my.Example1"); 
     logger.error("error from my.Example1"); 
     logger.fatal("fatal from my.Example1"); 

     logger.info(SPECIAL_MARKER+" This goes in a special file"); 
    } 
} 

のlog4jプロパティされています:ここではいくつかのサンプルコードはある

log4j.rootLogger=INFO, stdout, R 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=logs/special.log 
log4j.appender.R.MaxFileSize=100KB 
log4j.appender.R.MaxBackupIndex=1 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 
log4j.appender.R.filter.1=org.apache.log4j.varia.StringMatchFilter 
log4j.appender.R.filter.1.StringToMatch=SPECIAL 
log4j.appender.R.filter.1.AcceptOnMatch=true 
log4j.appender.R.filter.2=org.apache.log4j.varia.DenyAllFilter 

代替がアペンダを参照ロガーの設定を追加して、あなたのロガーを作成するために、そのロガー名を使用することです。 2番目のロガーを宣言する必要があるので、これはあまり優雅ではありません。

例Javaコード:

import org.apache.log4j.Logger; 

public class Example1 { 
    private static final Logger logger = Logger.getLogger(Example1.class); 
    private static final Logger specialLog = Logger.getLogger("special"); 

    public static void main(String[] args){ 
     logger.debug("debug from my.Example1"); 
     logger.info("info from my.Example1"); 
     logger.warn("warning from my.Example1"); 
     logger.error("error from my.Example1"); 
     logger.fatal("fatal from my.Example1"); 

     specialLog.info("This goes in a special file"); 
    } 
} 

log4j.properties: "特別な" ロガー上記の例では

log4j.rootLogger=INFO, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=logs/special.log 
log4j.appender.R.MaxFileSize=100KB 
log4j.appender.R.MaxBackupIndex=1 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 

log4j.logger.special=INFO, R, stdout 
log4j.additivity.special=false 

は特別なログへの出力を生成するために使用されます。

関連する問題