【问题标题】:Log4J change File path dynamicallyLog4J 动态更改文件路径
【发布时间】:2012-08-04 12:07:12
【问题描述】:

我想动态更改我的 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)....

当我尝试读取我设置的系统属性时:

System.out.println(System.getProperty("my.log"));

它返回空值。 我做错了什么?

【问题讨论】:

    标签: java dynamic properties log4j


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的对不起我的错误。我把它改成了System.setProperty("my.log", "C:/logfile.log");我在我的主要方法的第一行设置了这个,但我仍然得到同样的错误
    • 只是添加:System.out.println(System.getProperty("my.log")); 现在工作正常。但我仍然无法动态更改日志路径
    • log4j:ERROR setFile(null,false) call failed. java.io.FileNotFoundException: C:\logfile.log (Zugriff verweigert) at java.io.FileOutputStream.open(Native Method) Zugriff verweigert = 拒绝访问
    • 谢谢,我也刚收到。我用过:private static Logger logger = null;,我在 Main 中写道:System.setProperty("my.log", "C:/Workspace/logfile.log"); logger = Logger.getLogger(Main.class.getName()); 现在一切正常:)
    • 你可以在一开始就做static { System.setProperty("my.log", "C:/Workspace/logfile.log"); } private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
    【解决方案2】:

    您有一个拼写错误:“{my.log”而不是“my.log”

    【讨论】:

      【解决方案3】:

      在实例化记录器之前设置属性,一旦你初始化记录器设置属性将不值得。就像下面这样:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-22
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 1970-01-01
        相关资源
        最近更新 更多