我在我的应用程序中使用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
答案 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
设置并打开日志输出所在的文件。指定的文件必须是可写的。