2016-08-10 2 views
1

Ich verwende Log4j in meinem Projekt, um die Protokolle für die Fehleranalyse zu verwenden. Ich habe ein Problem beim Erstellen einer neuen Datei jedes Mal, da es nicht funktioniert. Meine Anforderung ist, einen Dateinamen im folgenden Format zu erstellen Filename_<DDMMYYYY_HHMMSS> jedes Mal, wenn ich mein Skript ausführen. aber ich habe mehrere codes aus dem netz ausprobiert und nichts funktioniert für mich. Eine Datei wird im Dateiordner generiert, indem die folgende XML-Datei und die Skripts mit derselben Datei für den gesamten Lauf verwendet werden. Bitte helfen Sie mir eine neue Datei jedes Mal mit dem xml unterSo generieren Sie einen eindeutigen Dateinamen für jeden Lauf in Log4j

XML Gebrauchte

<?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>

Fehler zu erzeugen

log4j: Kontinuierbare Parsing-Fehler 25 und Spalte WARN 12

log4j: WARN Th Der Inhalt des Elementtyps "appender" muss übereinstimmen "(errorHandler?, param *, rollingPolicy?, triggeringPolicy?, connectionSource?, layout?, filter *, appender-ref *)".

log4j: WARN Unerkannte Element rollingPolicy

Sorry für die XML in HTML zu befestigen.

Antwort

0

Wir können dies auf verschiedene Arten tun. Aber das, was ich gefunden habe, ist einfach mit dem Setup in XML zu tun. Wir müssen den Variablenwert durch die Linie unten in Skript setzen,

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); 

Mit dem obigen Code werden wir ein dynamischer Wert für die Variable logfilename in der XML-Setup können. Also, wenn das Skript das Objekt erstellt wird es einen neuen Dateinamen mit den folgenden Zeilen erstellen,

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

Modified XML Gebrauchte

<?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>

Also dieser Code ein generieren neuer Dateiname für jeden Lauf ... Vielen Dank für die Mühe, diesen Code zu machen ....

Verwandte Themen