java – 在运行时更改log4j属性文件会导致创建一个空的默认日志
发布时间:2020-12-15 02:29:07 所属栏目:Java 来源:网络整理
导读:我有一个使用log4j登录文本文件的应用程序,我在我的可执行jar文件中放置了一个log4j.properties文件,其中包含默认的日志配置参数. 我的log4j.properties文件如下所示: log4j.rootLogger=INFO,A1log4j.appender.A1=org.apache.log4j.FileAppenderlog4j.appen
我有一个使用log4j登录文本文件的应用程序,我在我的可执行jar文件中放置了一个log4j.properties文件,其中包含默认的日志配置参数.
我的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-additions库,允许创建一个Lazy初始化appender,避免创建空日志文件.
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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |