log4j gibt mehrere benutzerdefinierte Protokolldateien aus
Wenn Sie unabhängige Protokolldateien in tatsächlichen Anwendungen ausgeben müssen, wie können Sie den erforderlichen Inhalt vom ursprünglichen Protokoll trennen und eine separate Protokolldatei erstellen?
Schauen wir uns zunächst eine gemeinsame Datei log4j.properties an, die Protokoll in der Konsole- und test.log -Dateien aufzeichnet:
Die Codekopie lautet wie folgt:
log4j.rootlogger = debug, stdout, logfile
log4j.appender.stdout = org.apache.log4j.conoleAppender
log4j.appender.stdout.layout = org.apache.log4j.patternLayout
log4j.appender.stdout.layout.ConversionPattern =%d%p [%c] -%m%n
log4j.appender.logfile = org.apache.log4j.rollingFileAppender
log4j.appender.logfile.file = log/test.log
log4j.appender.logfile.maxFileSize = 128MB
log4j.appender.logfile.maxbackupindex = 3
log4j.appender.logfile.layout = org.apache.log4j.patternLayout
log4j.appender.logfile.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
Was ist, wenn mehrere Protokolldateien in derselben Klasse ausgegeben werden müssen? Tatsächlich ist die Wahrheit die gleiche.
Die Codekopie lautet wie folgt:
private statische log -logger1 = logFactory.getLog ("myLogger1");
private static logger2 = logFactory.getLog ("myLogger2");
Die Konfiguration in log4j.properties lautet wie folgt:
Die Codekopie lautet wie folgt:
log4j.logger.mylogger1 = debug, test1
log4j.appender.test1 = org.apache.log4j.fileAppender
log4j.appender.test1.file = log/test1.log
log4j.appender.test1.layout = org.apache.log4j.patternLayout
log4j.appender.test1.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
log4j.logger.mylogger2 = debug, test2
log4j.appender.test2 = org.apache.log4j.fileAppender
log4j.appender.test2.file = log/test2.log
log4j.appender.test2.layout = org.apache.log4j.patternLayout
log4j.appender.test2.layout.ConversionPattern =%d {yyyy-mm-dd HH: MM: SS}%-5p [%t]%c.%m (%l)-%M%n
Für verschiedene Protokolle sollten verschiedene Protokolle verwendet werden (z. B. logger1.info ("ABC") sollte zum Ausgang an test1.log verwendet werden).
Ein weiteres Problem ist, dass diese benutzerdefinierten Protokolle auf die von LOG4J.RootLogger konfigurierten Protokolle ausgeben. Mach dir keine Sorgen, hier ist ein Schalter:
log4j.additivity
Es wird verwendet, um festzustellen, ob es gleichzeitig von LOG4J.Rootlogger konfiguriert ist.
Diese Methode hat jedoch einen kleinen Fehler, dh der Klassenname im gedruckten Protokoll kann nur MyLogger oder MyLogger2 sein.
2 Dynamische Konfigurationspfade
Wenn der vom Programm geforderte Protokollpfad ständig geändert werden muss und es unmöglich ist, die Konfigurationsdatei jedes Mal zu ändern, können Sie Umgebungsvariablen verwenden, um sie zu lösen.
Die Konfiguration von log4j lautet wie folgt:
Die Codekopie lautet wie folgt:
log4j.rootlogger = Debug, Infolog, Debuglog
#info log
log4j.appender.infolog = org.apache.log4j.dailyrollingFileAppender
log4j.appender.infolog.file = $ {log.dir}/$ {log.info.file}
log4j.appender.infolog.datepattern = .yyyy-mm-dd
log4j.appender.infolog.Threshold = info
log4j.appender.infolog.layout = org.apache.log4j.patternLayout
log4j.appender.infolog.layout.ConversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
#Debug -Protokoll
log4j.appender.debuglog = org.apache.log4j.rollingFileAppender
log4j.appender.debuglog.file = $ {log.dir}/$ {log.debug.file}
log4j.appender.debuglog.threshold = debug
log4j.appender.debuglog.maxFileSize = 128MB
log4j.appender.debuglog.maxbackupindex = 3
log4j.appender.debuglog.layout = org.apache.log4j.patternLayout
log4j.appender.debuglog.layout.ConversionPattern =%d {yyyy-mm-dd HH: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
Zu diesem Zeitpunkt müssen Sie vor dem Drucken des Protokolls das System mit System zur Definition der Umgebungsvariablen für die Ausgabempfad- und Dateinamen verwenden:
Die Codekopie lautet wie folgt:
System.setProperty ("log.dir", logDir);
System.setProperty ("log.info.file", InfologFileName);
System.setProperty ("log.debug.file", DebuglogFileName);
Anhang: Die Formatbedeutung des Musterparameters
%C Der vollständige Name der Klasse, zu der die Protokollinformationen gehört
%D gibt das Datum oder die Uhrzeit des Protokollzeitpunkts aus. : 2013-8-19-22:10:28
%F Der Klassenname der Klasse, zu dem die Protokollinformationen gehört
%l Das Ausgabeprotokollereignis erfolgt, dh die Anweisung, die Ausgabenprotokollinformationen finden, in welcher Zeile der Klasse sie sich befindet
%m Ausgabe Die im Code angegebenen Informationen, z. B. die Nachricht in Protokoll (Nachricht)
%n gibt einen Wagenrücklauf -Break aus, Windows -Plattform "/r/n" und die Unix -Plattform "/n" ist "/n"
%P -Ausgangspriorität, d. H. Debugg, Info, Warn, Fehler, tödlich. Wenn es ausgegeben wird, indem es Debug () anruft, ist es Debug und so weiter
%r Ausgabe Die Anzahl der Millisekunden, die vom Beginn der Anwendung aufgenommen wurden, um die Protokollinformationen auszugeben
%t gibt den Threadnamen aus, der das Protokollereignis generiert