Log4j以编程方式为并行运行创建新文件

时间:2014-04-03 02:34:26

标签: java log4j

我有些不知所措。我正在尝试每次进程运行时创建一个新的日志文件。该过程可以并行运行。如果是这样,我想为每个进程创建一个单独的日志,并将日志写入各自的日志文件。我正在努力解决这个问题,因为要创建的“最后一个”appender是什么,这就是文件写入的地方。我不知道如何解决这个问题。够了,这是log4j.properties文件。

log4j.rootLogger=DEBUG, CONSOLE

log4j.appender.myappender.encoding=UTF-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-5p %x %c - %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.Append=false
log4j.appender.LOGFILE.Threshold=DEBUG
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-5p %x %c - %m%n

和我正在使用的代码

    Logger rootLogger = Logger.getRootLogger();
    Enumeration appenders = rootLogger.getAllAppenders();
    FileAppender fa = null;
    while(appenders.hasMoreElements())
    {
        Appender currAppender = (Appender) appenders.nextElement();
        if(currAppender instanceof FileAppender)
        {
            fa = (FileAppender) currAppender;
        }
    }
    if(fa != null)
    {
        fa.setFile(logFileName);
        fa.activateOptions();
    }
    else
    {
        log.info("No File Appender found");
    }

*更新

所以我正在做的是运行Quartz。 Quartz有一个可以与不同的params同时调用的工作。我希望每个单独的作业都有自己的日志文件,即使它们都在调用同一个类。

非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:1)

我猜测最后一个appender只是被写入,因为你只定义了一个appender。

因此,当您更改appender写入的文件时,您可以有效地更改您唯一的appender的配置。

我要做的是以编程方式创建一个新的appender(而不是使用log4j.xml / .properties)并设置它写入的文件。

http://howtodoinjava.com/2013/04/08/how-to-programmatically-configure-appenders-in-log4j/