【问题标题】:How to programmatically specify the file name for RollingFileAppender in log4j?如何以编程方式在 log4j 中指定 RollingFileAppender 的文件名?
【发布时间】:2014-12-23 09:13:39
【问题描述】:

背景:

我的应用程序允许从 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 文件中做什么。

【问题讨论】:

    标签: java logging log4j rollingfileappender


    【解决方案1】:

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

    在引导时使用它:

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

    【讨论】:

    • 对于限定的类名,“复制限定名”的 Eclipse 上下文菜单给了我/PHAULR-master/util/log4j/RoleSpecificRollingFileAppender.java/PHAULR-master 是项目。然后我在log4j.appender.file 中使用了util.log4j.RoleSpecificRollingFileAppender,得到了一个错误log4j:ERROR No output stream or file set for the appender named [null]
    • 完全限定名意味着类的名称以及包名称,您在编写类时会声明。根据您的错误消息,您的 RoleSpecificRollingFileAppender 似乎没有被拾取。更正 FQ 类名。
    • 已解决涉及限定类名的错误。出现警告log4j:WARN File option not set for appender [file]。它不会将日志写入文件。
    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 2023-03-26
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多