2016-11-08 2 views
0

Ich habe eine App in Java mit log4j als meine Protokollierung jar, aber wenn ich versuche, meine App zu debuggen und öffnen Sie die Protokolldatei finde ich kurz und mit nur den letzten Zeilen habe ich geloggt und die Rotation Dateien zeigen keine von die Protokolle, die ich vorher gesehen habe.Warum werden meine Protokolle entfernt?

Stimmt etwas nicht mit meiner Konfigurationsdatei? Ich habe mehrere Projekte, die auf dieselbe Protokolldatei verweisen. Könnte das das Problem sein?

Hier ist meine log4j.properties:

log4j.rootLogger=ERROR,logfile 

log4j.appender.logfile=org.apache.log4j.RollingFileAppender 
log4j.appender.logfile.File=/opt/tomcat7/logs/mylogs.log 

log4j.appender.logfile.MaxFileSize=500KB 
# Keep one backup file 
log4j.appender.logfile.MaxBackupIndex=2 

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d %5p (%F:%L) - %m%n 

Dank

+0

Verwendung DailyRollingFileAppender statt RollingFileAppender. könnte es helfen? –

+0

Ich stellte fest, dass das Problem bei meinem ispmanager lag, es zeigte mir nicht die komplette Datei. Vielen Dank. –

Antwort

2

Sie bestimmte Höhe der Wurzel Logger ERROR zu sein, während in den meisten Fällen wird es nicht viel von Fehlermeldungen sein - vielleicht ein -zwei pro vielen INFO-Level-Nachrichten, während Sie sie unterdrückt: ERROR-Ebene ermöglicht nur protokolliert ERROR und FATAL Nachrichten. Und es filtert jede INFO-, WARN-, DEBUG-, TRACE-Ebene aus. Normalerweise verwenden Sie ein solches Setup nicht in der Entwicklung. Und in der Produktion unterdrücken Sie normalerweise nur einige ausführliche Klassen/Pakete, aber nicht alles wie in der Konfiguration, die Sie gepostet haben (dh hier gilt ERROR-Ebene für jede Klasse).

Also ich nehme an, Sie sollten ERROR mit INFO in Ihrer Konfiguration ersetzen.

UPDATE: Auch wahrscheinlich log4j Ihre Konfigurationsdatei einfach nicht sehen. Ich traf diese mehrmals ausgibt persönlich und jedes Mal hatte ich eine Abhilfe wie folgt aus:

public class Log4JProperties { 

    public static void setupLog4j(){ 
     String log4jPathFile = Log4JProperties.class.getResource("/log4j.properties").getFile(); 

     Properties props = new Properties(); 
     try { 
      InputStream configStream = new FileInputStream(log4jPathFile); 
      props.load(configStream); 
      configStream.close(); 
     } catch (IOException e) { 
      System.out.println("log4j configuration file not found"); 
     } 
     LogManager.resetConfiguration(); 
     PropertyConfigurator.configure(props); 
    } 

} 

Dies ist nicht notwendig, wenn ich Code ausführen von innen Intellij, aber wenn ich Maven laufen mit, Protokollierung funktioniert nicht ohne Aufruf diese Funktion am Anfang der Ausführung.

+0

Das ist nicht das Problem, wenn ich sagte, dass Protokolle fehlen, meinte ich Fehlerprotokolle, die ich vorher gesehen habe, und ich wusste, dass sie da waren. Jetzt sind diese Logs nicht in der Log-Datei oder in den Backups, sie sind einfach nirgendwo. Dies geschieht in der Produktion, deshalb verwende ich Level ERROR –

+0

@AnaFranco dann wahrscheinlich log4j Ihre Konfigurationsdatei nicht entdecken. Ich hatte dieses Problem mehrmals. Ich habe die Antwort aktualisiert. – Yurii

0

Wenn Sie MaxBackupIndex = 2 angeben, werden nur die letzten 2 Sicherungen gespeichert. Wenn die Protokolldatei schnell voll ist, werden alte Sicherungsdateien überschrieben.

Sie müssen vielleicht die MaxFileSize oder MaxBackupIndex auf dem Dateiprotokollierungsverhalten basiert erhöhen ...

https://logging.apache.org/log4php/docs/appenders/rolling-file.html

+0

Ich denke, das könnte das Problem sein, aber die Backup-Dateien überprüfen ihre Daten sind wirklich alt, ist wie die neuen Protokolle nie dort angekommen, habe ich bereits diese Werte erhöht, aber ich habe noch Protokolle fehlen –

Verwandte Themen