繁体   English   中英

如何为Log4j中的每次运行生成唯一的文件名

[英]How to generate unique file name for each run in Log4j

我在项目中使用log4j来使用为故障分析生成的日志。 每次都无法创建新文件时,我遇到了问题。 我的要求是每次运行脚本时都以以下格式Filename_<DDMMYYYY_HHMMSS>创建文件名。 但是我已经尝试了多种来自网络的代码,但对我来说没有用。 通过使用以下xml和脚本(在所有运行中使用相同的文件),将在文件夹中生成文件。 请每次使用以下xml来帮助我生成一个新文件

使用的XML

 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <!-- For Printing message with date , time & class name also--> <param name="ConversionPattern" value="[%d{dd MMM yyyy HH:mm:ss}] %5p[%c{1}]: %m%n"/> <!-- For printing message only <param name="ConversionPattern" value="%-5p[%c{1}]: %m%n"/>--> </layout> </appender> <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender"> <param name="append" value="false"/> <param name="file" value="MyApp_%d{ddMMyyyy_HHMMSS}_MyApp.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss}%x %-5p[%c{1}]: %m%n"/> </layout> <rollingPolicy class="org.apache.log4j.rolling.FixedWindowRollingPolicy"> <param name="activeFileName" value="MyApp_%d{ddMMyyyy_HHMMSS}.log"/> <param name="fileNamePattern" value="MyApp_%d{ddMMyyyy_HHMMSS}_MyApp.log"/> <param name="minIndex" value="0"/> <param name="maxIndex" value="5"/> </rollingPolicy> </appender> <root> <level value="INFO"/> <appender-ref ref="consoleAppender"/> <appender-ref ref="fileAppender"/> </root> </log4j:configuration> 

错误

log4j:WARN连续解析错误25和列12

log4j:WARN元素类型“ appender”的内容必须匹配“(errorHandler?,param *,rollingPolicy?,triggeringPolicy?,connectionSource?,layout?,filter *,appender-ref *)”。

log4j:WARN无法识别的元素rollingPolicy

抱歉,无法以HTML格式附加xml。

我们可以通过多种方式做到这一点。 但是我发现使用XML设置很容易。 我们需要在脚本的下面一行中设置变量值,

DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
Date date = new Date();
System.out.println(dateFormat.format(date));   
String dynamicFileName="Logs_"+dateFormat.format(date);
System.setProperty("logfilename", dynamicFileName);

使用上面的代码,我们将能够在xml中为变量logfilename设置动态值。 因此,当脚本创建对象时,它将使用以下几行创建一个新的文件名,

DOMConfigurator.configure("log4j.xml");
Logger log = Logger.getLogger(Area.class.getName());
Log.error("mulla");

修改的XML使用

  <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <!-- For Printing message with date , time & class name also--> <param name="ConversionPattern" value="[%d{dd MMM yyyy HH:mm:ss}] %5p[%c{1}]: %m%n"/> <!-- For printing message only <param name="ConversionPattern" value="%-5p[%c{1}]: %m%n"/>--> </layout> </appender> <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender"> <param name="append" value="false"/> <param name="file" value="${logfilename}.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss}%x %-5p[%c{1}]: %m%n"/> </layout> </appender> <root> <level value="INFO"/> <appender-ref ref="consoleAppender"/> <appender-ref ref="fileAppender"/> </root> </log4j:configuration> 

因此,此代码将为每次运行生成一个新的文件名。感谢所有为编写此代码而付出的努力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM