Log4J动态更改文件路径

时间:2012-08-07 12:59:44

标签: java dynamic properties log4j

我想动态更改log4j日志文件的路径和文件名。

我已阅读了很多页面,几乎每个人都告诉我应该使用像这里的系统属性: how to change the log4j log file dynamically?

所以我的log4j.properties文件如下所示:

log4j.logger.JDBC_LOGGER=INFO,jdbcTests
log4j.additivity.JDBC_LOGGER = false

log4j.appender.jdbcTests=org.apache.log4j.FileAppender
log4j.appender.jdbcTests.File=${my.log}
log4j.appender.jdbcTests.layout=org.apache.log4j.PatternLayout
log4j.appender.jdbcTests.append = false
log4j.appender.jdbcTests.layout.ConversionPattern=%d{yyyy mm dd HH:mm:ss} %5p %C:Line %L - %m%n

在我的主要方法中,我将设置我的新系统属性:

System.setProperty("{my.log", "C:/logfile.log");

但我得到一个错误:

log4j:ERROR setFile(null,false) call failed.
java.io.FileNotFoundException: 
    at java.io.FileOutputStream.open(Native Method)....

当我尝试用:

读取我的set系统属性时
System.out.println(System.getProperty("my.log"));

它返回null。 我做错了什么?

3 个答案:

答案 0 :(得分:7)

我认为你的意思是“my.log”不是“{my.log”

System.setProperty("my.log", "C:/logfile.log");

我不认为您可以在日志记录开始后更改此设置,因此您需要尽可能早地在程序中进行设置。

顺便说一句:您可以将FileAppender子类化,使其以您喜欢的方式运行。

答案 1 :(得分:1)

你有拼写错误:" {my.log"而不是" my.log"

答案 2 :(得分:0)

在实例化记录器之前设置属性,一旦初始化记录器设置,该属性将不值得。如下所示:

System.setProperty("my.log", "C:\\src\\com\\web\\automation\\logs\\Application.log");
PP_LOGS = Logger.getLogger("devpinoyLogger");