【问题标题】:How to generate unique file name for each run in Log4j如何为 Log4j 中的每次运行生成唯一的文件名
【发布时间】:2016-12-16 08:40:27
【问题描述】:

我在我的项目中使用 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 Unrecognized element rollingPolicy

抱歉,在 HTML 中附加了 xml。

【问题讨论】:

    标签: java selenium selenium-webdriver


    【解决方案1】:

    我们可以通过多种方式做到这一点。但是我发现使用 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>

    因此,此代码将为每次运行生成一个新文件名...感谢大家为编写此代码所做的努力....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      相关资源
      最近更新 更多