有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在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 Continuable parsing error 25 and column 12

log4j:WARN The content of element type "appender" must match "(errorHandler?,param*,rollingPolicy?,triggeringPolicy?,connectionSource?,layout?,filter*,appender-ref*)".

log4j:WARN Unrecognized element rollingPolicy

很抱歉将xml附加到HTML中


共 (1) 个答案

  1. # 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

    &13; 第13部分,;
        <?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>
    和#13;
    和#13;

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