2017-05-25 6 views
1

Ich habe mit diesem Problem im Thema gekämpft.Wie wird das aktuelle Clientverzeichnis zum Protokolldateinamen hinzugefügt?

habe ich versucht, so etwas wie dieses:

String sCurrDir = System.getProperty("user.dir"); 
int nLastBSlash = sCurrDir.lastIndexOf('/'); 
System.setProperty("current.folder", sCurrDir.substring(nLastBSlash + 1)); 

und addierten die folgenden zu den log4j.properties:

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender"> 
    <param name="Threshold" value="DEBUG" /> 
    <param name="append" value="true" /> 
    <param name="maxFileSize" value="10MB" /> 
    <param name="maxBackupIndex" value="50" /> 

    <param name="File" value="./log/${current.folder}-wcss-simulator-${current.date}.log"/> 

    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS}\t %-5p\t [%X{ThreadId}]\t %X{MethodName}\t - %m%n" /> 
    </layout> 
</appender> 

Aber der Dateiname beginnt erst mit einem Bindestrich.

+0

Log4j wird beim Start der Anwendung initialisiert. Wenn Sie das wirklich erreichen wollen, müssen Sie einen eigenen Appender hinzufügen, der org.apache.log4j.RollingFileAppender erweitert. –

+0

Ihre Frage ist nicht eindeutig. Zuallererst müssen Sie log4j2 und nicht nur log4j eindeutig angeben, da beide APIs sehr unterschiedlich sind. Sie haben bereits einen DOT (.) Im Dateiparameter, der den aktuellen Ordner darstellt. Sie sollten log4j2.properties anstelle von log4j.properties verwenden. – VivekRatanSinha

Antwort

1

Ihre Implementierung funktioniert nicht, weil die Protokollierung bereits vor begonnen hat Sie Stellen Sie die current.folder Eigenschaft ein. Haben Sie Zugriff auf die main Methode des Programms oder ist dies eine containerbasierte Anwendung?

Wenn Sie Zugriff auf die main-Methode haben, müssen Sie sicherstellen, dass das erste, was Sie tun, diese Eigenschaft festlegen, bevor Sie die erste Logger Instanz erstellen.

0

Sie können versuchen, Ihre eigenen Appender wie Implementierung:

import org.apache.log4j.RollingFileAppender;  
public class CustomFileAppender extends RollingFileAppender { 

     public CustomFileAppender() { 
      super(); 
      String sCurrDir = System.getProperty("user.dir"); 
      int nLastBSlash = sCurrDir.lastIndexOf('/'); 
      System.setProperty("current.folder", sCurrDir.substring(nLastBSlash + 1)); 
     } 
    } 

konfigurieren log4j Eigenschaften/xml-Datei als:

<appender name="fileAppender" class="CustomFileAppender"> 
     <param name="Threshold" value="DEBUG" /> 
     <param name="append" value="true" /> 
     <param name="maxFileSize" value="10MB" /> 
     <param name="maxBackupIndex" value="50" /> 

     <param name="File" value="./log/${current.folder}-wcss-simulator-${current.date}.log"/> 

     <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS}\t %-5p\t [%X{ThreadId}]\t %X{MethodName}\t - %m%n" /> 
     </layout> 
    </appender> 
+0

Ich arbeite mit Log4j2, erkennt RollingFileAppender nicht. Wie kann ich den Code ändern, um zu funktionieren? Danke – dushkin

+0

Diese Klasse sollte da sein, auch wenn Sie log4j2 verwenden. Ich habe den Import im Code aktualisiert. Bitte versuchen Sie es mit diesem. –

+0

nein. Es zeigt immer noch einen Fehler an. Ich habe Abhängigkeiten für log4j api 2.82 und log4j core 2.8.2 hinzugefügt. Ist das korrekt? Außerdem bietet es mir an, die Basisklasse in RollingFileManager zu ändern. – dushkin

Verwandte Themen