簡體   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