1
我有很多selenium測試爲每個類創建一個記錄器,它可能不是最好的方法,但它的代碼是由其他人編寫的,我沒有時間重寫它。我希望每個測試都有它自己的日誌文件,以便更容易地看到出錯的地方。Log4j爲每個記錄器創建一個文件
有沒有辦法讓log4j爲每個創建的記錄器創建一個文件?
我有很多selenium測試爲每個類創建一個記錄器,它可能不是最好的方法,但它的代碼是由其他人編寫的,我沒有時間重寫它。我希望每個測試都有它自己的日誌文件,以便更容易地看到出錯的地方。Log4j爲每個記錄器創建一個文件
有沒有辦法讓log4j爲每個創建的記錄器創建一個文件?
是的,你可以用log4j1做到這一點,但我相信唯一的方法是通過編程將文件appender添加到記錄器。
下面是一些示例代碼:
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配置文件:
<?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>
注意,你可能並不需要指定控制檯的appender,我只是爲了確保一切正常。您甚至可能不需要指定任何記錄器,但我沒有使用該配置進行測試。
上面的輸出是3個日誌文件,每個文件包含提供給相應記錄器的一條消息以及所有日誌消息的控制檯輸出。