Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行时更改log4j属性文件会导致创建空的默认日志_Java_Log4j_Logging - Fatal编程技术网

Java 在运行时更改log4j属性文件会导致创建空的默认日志

Java 在运行时更改log4j属性文件会导致创建空的默认日志,java,log4j,logging,Java,Log4j,Logging,我有一个使用log4j登录文本文件的应用程序,我将log4j.properties文件放在包含默认日志配置参数的可执行jar文件中 我的log4j.properties文件如下所示: log4j.rootLogger=INFO, A1 log4j.appender.A1=org.apache.log4j.FileAppender log4j.appender.A1.File=mylogfile.log log4j.appender.A1.layout=org.apache.log4j.Patte

我有一个使用log4j登录文本文件的应用程序,我将log4j.properties文件放在包含默认日志配置参数的可执行jar文件中

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

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=mylogfile.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p [%t] - %m%n
我的应用程序还有一个命令行选项,允许用户更改日志文件名,因此我有一个类似以下的函数,可以在运行时更改log4j的设置:

public void changeLogFileName(String filename) {    
          props.setProperty("log4j.appender.A1","org.apache.log4j.DailyRollingFileAppender");
          props.setProperty("log4j.appender.A1.DatePattern","'-'ddMMyyyy");
          props.setProperty("log4j.appender.A1.File",filename);
          LogManager.resetConfiguration();
          PropertyConfigurator.configure(props);
    }
一切正常,除非执行语句LogManager.resetConfiguration()和/或PropertyConfigurator.configure(props),否则会自动创建默认的空日志文件(mylogfile.log)。 之后,我从应用程序中记录的所有内容都将正确写入新文件,但仍然会创建一个空文件(在log4j.properties中使用默认日志文件名)

有没有办法避免创建空的默认日志文件

我终于开发了一个库,它允许创建一个延迟初始化附加器,以避免创建空日志文件

log4.properties 方法来更改路径
#Lazy File Appender
log4j.appender.A1=org.pollerosoftware.log4j.additions.appenders.LazyFileAppender
log4j.appender.A1.File=juakaritoglory.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p [%t] - %m%n
/**
 * Change the path of log file
 * @param path new path
 */
public synchronized void changeLogPath(String path) {
      String filename = (path.endsWith(File.separator)) ? path : path + File.separator;
      filename += LOGFILENAME + "-{timestamp}.log";

      props.setProperty("log4j.appender.A1","org.pollerosoftware.log4j.additions.appenders.TimestampFileAppender");
      props.setProperty("log4j.appender.A1.TimestampPattern","ddMMyyyy");
      props.setProperty("log4j.appender.A1.File",filename);
      LogManager.resetConfiguration();
      PropertyConfigurator.configure(props);
}