简体   繁体   English

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

[英]How to programmatically specify the file name for RollingFileAppender in log4j?

Background: 背景:

My application allows two operating modes that can be chosen from a GUI. 我的应用程序允许从GUI中选择两种操作模式。
If it operates as a server, I want to direct the logs into the server.log file. 如果它作为服务器运行,我想将日志定向到server.log文件中。
If it operates as a client, I want to direct the logs into the client.log file. 如果它作为客户端运行,我想将日志定向到client.log文件中。

Question: 题:

How to programmingly specify different names for different modes for RollingFileAppender in log4j? 如何在log4j中为RollingFileAppender的不同模式以编程方式指定不同的名称?

Added (10-29-2014): The current answer by @Manish Maheshwari does not work for me. 添加(10-29-2014): @Manish Maheshwari的当前答案对我不起作用。 It raises the warning log4j:WARN File option not set for appender [file] and it does not write logs into file. 它将引发警告log4j:WARN File option not set for appender [file] ,并且未将日志写入文件。


My attempt: 我的尝试:

I define RoleSpecificRollingFileAppender class which extends RollingFileAppender and overrides the setFile() method. 我定义了RoleSpecificRollingFileAppender类,该类扩展了RollingFileAppender并覆盖了setFile()方法。

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

My RollingFileAppender is as follows: 我的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>

However I don't know what to do in Java code and the log4j.properties file. 但是我不知道在Java代码和log4j.properties文件中该怎么做。

Use the fully qualified classname for RoleSpecificRollingFileAppender in log4j.appender.file property. log4j.appender.file属性中为RoleSpecificRollingFileAppender使用完全限定的类名。 Try removing the File line from config. 尝试从配置中删除文件行。

Use this at bootstrap: 在引导程序上使用此命令:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM