背景:
我的应用程序允许从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
文件。
答案 0 :(得分:0)
在RoleSpecificRollingFileAppender
属性中使用log4j.appender.file
的完全限定类名。
尝试从配置中删除文件行。
在bootstrap中使用:
RollingFileAppender app = new RoleSpecificRollingFileAppender();
app.setFile(myfile);
BasicConfigurator.configure(app);