如何将RollingFileAppender更改为配置文件中设置的另一个?

时间:2011-09-21 18:58:34

标签: java log4j

我在我的应用程序中使用log4j,以及将输出设置为console和rollingfileappender的配置文件。在下面粘贴配置文件。有没有办法改变 在代码中打开配置文件后的fileappender输出文件?它对我来说很好,但有时我会想要使用与配置文件中的默认输出文件不同的输出文件。谢谢你的任何指示。

log4j.rootLogger=info, stdout, RFA

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=[%p] [%d{MM/dd/yyyy HH:mm:ss}] - %m %n

log4j.appender.RFA=org.apache.log4j.RollingFileAppender
log4j.appender.RFA.File=${user.home}/output.log

log4j.appender.RFA.MaxFileSize=100KB
# Keep backup files
log4j.appender.RFA.MaxBackupIndex=5

log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
log4j.appender.RFA.layout.ConversionPattern=[%p] [%d{MM/dd/yyyy HH:mm:ss}] - %m %n

3 个答案:

答案 0 :(得分:2)

如果您要从代码中编辑属性文件并让log4j检测到它,则必须首先通过调用PropertyConfigurator.configureAndWatch("log4j.properties")使log4j监视属性文件

但是,我更喜欢使用{kenal提到的Logger api以编程方式访问appender。

更新;以编程方式执行的代码

Enumeration allAppenders = Logger.getRootLogger().getAllAppenders();
while (allAppenders.hasMoreElements()) {
    Object object = (Object) allAppenders.nextElement();
    if (object instanceof RollingFileAppender) {
        RollingFileAppender appender = (RollingFileAppender) object;
        appender.setFile("/path/to/new/file.log");
        appender.activateOptions();
        break;
    }
}

答案 1 :(得分:0)

定义另一个appender(具有不同的File值)。

答案 2 :(得分:0)

我认为您想以编程方式设置(更改)文件。看看RollingFileAppender API

public void setFile(String fileName,
                    boolean append,
                    boolean bufferedIO,
                    int bufferSize)
             throws IOException
  

设置并打开日志输出所在的文件。指定的文件必须是可写的。