2017-05-06 5 views
1

クラスごとにロガーを作成するセレンテストがたくさんありますが、これは最善の方法ではないかもしれませんが、誰かによって書かれたコードなので、書き直す時間はありません。私は各テストに自分のログファイルを持っていて、何が間違っているのか分かりやすいようにしたいと思います。Log4jはロガーごとにファイルを作成します

log4jに作成される各ロガーのファイルを作成する方法はありますか?

答えて

0

はい、これはlog4j1で行うことができますが、唯一の方法はプログラムでファイルアペンダーをロガーに追加することだと思います。ここで

は、いくつかのサンプルコードです:あなたはおそらくコンソールアペンダを指定する必要はありません

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> 
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n" /> 
     </layout> 
    </appender> 

    <logger name="test" additivity="false"> 
     <level value="DEBUG" /> 
     <appender-ref ref="consoleAppender" /> 
    </logger> 
</log4j:configuration> 

:ここ

package test; 

import org.apache.log4j.Appender; 
import org.apache.log4j.FileAppender; 
import org.apache.log4j.Level; 
import org.apache.log4j.Logger; 
import org.apache.log4j.PatternLayout; 

public class Main { 

    private static final Logger logger = Logger.getLogger(Main.class); 
    private static final Logger logFoo = Logger.getLogger("test.Foo"); 
    private static final Logger logBar = Logger.getLogger("test.Bar"); 

    public static void main(String[] args) { 
     logger.addAppender(createFileAppender("logs/main.log")); 
     logFoo.addAppender(createFileAppender("logs/foo.log")); 
     logBar.addAppender(createFileAppender("logs/bar.log")); 

     logger.info("This is the main logger"); 
     logFoo.info("this is the foo logger"); 
     logBar.info("This is the bar logger"); 
    } 

    private static Appender createFileAppender(String logName) { 
     FileAppender fa = new FileAppender(); 
     fa.setName("FileLogger"); 
     fa.setFile(logName); 
     fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n")); 
     fa.setThreshold(Level.DEBUG); 
     fa.setAppend(true); 
     fa.activateOptions(); 
     return fa; 
    } 
} 

は、サンプルのlog4j.xml設定ファイルであります私は物事が働いていることを確認するためにそれをしました。ロガーを指定する必要はありませんが、その設定ではテストしませんでした。

上記の出力は、それぞれ対応するロガーに提供された1つのメッセージと、すべてのログメッセージのコンソール出力を含む3つのログファイルです。

関連する問題