Log4j为每个记录器创建一个文件

时间:2017-05-06 23:49:41

标签: log4j

我有很多selenium测试,每个类创建一个记录器,它可能不是最好的方法,但它的代码是由其他人编写的,我没有时间重写它。我希望每个Test都拥有它自己的日志文件,以便更容易看出出了什么问题。

有没有办法让log4j为每个创建的记录器创建一个文件?

1 个答案:

答案 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个日志文件,每个文件包含提供给相应记录器的一条消息,以及所有日志消息的控制台输出。