我有很多selenium测试,每个类创建一个记录器,它可能不是最好的方法,但它的代码是由其他人编写的,我没有时间重写它。我希望每个Test都拥有它自己的日志文件,以便更容易看出出了什么问题。
有没有办法让log4j为每个创建的记录器创建一个文件?
答案 0 :(得分:0)
是的,您可以使用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个日志文件,每个文件包含提供给相应记录器的一条消息,以及所有日志消息的控制台输出。