将Log4j配置从文件转换为代码内配置

时间:2016-08-06 06:18:33

标签: java logging

我想在Java中动态设置我的日志文件名,这就是为什么我试图以编程方式配置重新实现我的日志文件,以便我可以用变量设置日志文件名。

我不知道如何告诉log4j在info级别记录某个包。

我的log4j.properties看起来像这样:

log4j.rootLogger = warn, FILE

log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=log.txt
log4j.appender.FILE.Append=false
log4j.appender.FILE.MaxFileSize=99999999KB
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m - %5p %d{HH:mm:ss,SSS} [%t] (%F:%L)%n

log4j.logger.a.b.c.d=info

到目前为止我所拥有的是:

FileAppender fa = new FileAppender();
        fa.setName("FileLogger");
        fa.setFile("mylog"+args+".log");
        fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
        fa.setThreshold(Level.WARN);
        fa.setAppend(false);
        fa.activateOptions();

        //add appender to any Logger (here is root)
        Logger.getRootLogger().addAppender(fa);
        Logger.getLogger("a.b.c.d").setLevel(Level.INFO);

如果我将FileAppender设置为warn,如果我将其设置为info,则不会记录任何内容。我的最后一行代码似乎没有任何效果。有人知道缺少什么吗?

1 个答案:

答案 0 :(得分:0)

请从appender中删除setThreshold并进行测试。它对我有用。

来自Javadocs

public void setThreshold(优先级阈值) 设置阈值级别。 appender会忽略级别低于阈值级别的所有日志事件。 在配置文件中,通过将Threshold选项的值设置为级别字符串来指定此选项,例如“DEBUG”,“INFO”等。