如何以编程方式在log4j中指定RollingFileAppender的文件名?

时间:2014-10-28 03:14:00

标签: java logging log4j rollingfileappender

背景:

我的应用程序允许从GUI中选择两种操作模式 如果它作为服务器运行,我想将日志指向server.log文件 如果它作为客户端运行,我想将日志指向client.log文件。

问题:

  

如何在log4j中为RollingFileAppender的不同模式编程指定不同的名称?

已添加(10-29-2014): @Manish Maheshwari目前的答案对我不起作用。它会引发警告log4j:WARN File option not set for appender [file]并且不会将日志写入文件。


我的尝试:

我定义RoleSpecificRollingFileAppender类扩展RollingFileAppender并覆盖setFile()方法。

public class RoleSpecificRollingFileAppender extends RollingFileAppender {
    @Override
    public void  setFile(String fileName) {
        super.setFile(fileName);
    }
}

我的RollingFileAppender如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

<log4j:configuration>
    # Root logger option
    log4j.rootLogger=INFO, file

    # Direct log messages to a log file
    log4j.appender.file=[[What to do here? org.apache.log4j.RollingFileAppender]]
    log4j.appender.file.File = [[I don't know how to do here.]]
    log4j.appender.file.MaxFileSize=50MB
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm} %-5p %c{1}:%L - %m%n
</log4j:configuration>

但是,我不知道如何处理Java代码和log4j.properties文件。

1 个答案:

答案 0 :(得分:0)

RoleSpecificRollingFileAppender属性中使用log4j.appender.file的完全限定类名。 尝试从配置中删除文件行。

在bootstrap中使用:

RollingFileAppender app = new RoleSpecificRollingFileAppender();
app.setFile(myfile);
BasicConfigurator.configure(app);