Fügen Sie den folgenden Inhalt in Ihre Konfigurationsdatei ein.
Nennen Sie die Konfigurationsdatei log4j2.xml
Legen Sie die Datei log4j2.xml in einem Ordner ab, der sich im Klassenpfad befindet (dh in Ihrem Quellordner "src").
Verwenden Logger logger = LogManager.getLogger();Sie diese Option, um Ihren Logger zu initialisieren
Ich habe sofortFlush = "false" gesetzt, da dies für die Lebensdauer der SSD besser ist . Wenn Sie das Protokoll sofort in Ihrer Protokolldatei benötigen, entfernen Sie den Parameter oder setzen Sie ihn auf true
Der Vollständigkeit halber wird die Verwendung von instantFlush = "false" besonders empfohlen, wenn Async Loggers oder AsyncAppender verwendet werden.
Remko Popma
1
Hintergrund: instantFlush = "false" ermöglicht es den asynchronen Komponenten von Log4J2, mehrere Protokollereignisse in einem einzigen Disc-Schreibvorgang zusammenzufassen. Als Bonus werden Ihre letzten Protokollereignisse immer auf die Festplatte geschrieben und nie in einem Speicherpuffer hängen gelassen. (Etwas, das ich an log4j-1.2 ärgerlich fand.)
Remko Popma
1
Ich konnte die Beispiele auf der Log4j 2.0-Site nicht zum Laufen bringen, aber dieses tat es. Danke dir.
Djangofan
12
Bitte fügen Sie die Tatsache hinzu, dass für diejenigen, die Eclipse verwenden, möglicherweise eine Reinigung erforderlich ist. Um der Menschheit willen.
Reut Sharabani
1
@ThorstenNiehues Ich kann meinen vorherigen Kommentar nicht bearbeiten, aber Eclipse kopiert die Konfiguration beim Erstellen und aus irgendeinem Grund wird die Datei log4j.xml nicht immer kopiert, selbst wenn sie geändert wurde. Zumindest hat das das für mich gelöst.
Reut Sharabani
19
Hier ist meine Vereinfachung log4j2.xml, die auf der Konsole druckt und in eine tägliche fortlaufende Datei schreibt:
// java
private static final Logger LOGGER = LogManager.getLogger(MyClass.class);
// log4j2.xml
<?xml version="1.0" encoding="UTF-8"?><Configurationstatus="WARN"><Properties><Propertyname="logPath">target/cucumber-logs</Property><Propertyname="rollingFileName">cucumber</Property></Properties><Appenders><Consolename="console"target="SYSTEM_OUT"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/></Console><RollingFilename="rollingFile"fileName="${logPath}/${rollingFileName}.log"filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/><Policies><!-- Causes a rollover if the log file is older than the current JVM's start time --><OnStartupTriggeringPolicy/><!-- Causes a rollover once the date/time pattern no longer applies to the active file --><TimeBasedTriggeringPolicyinterval="1"modulate="true"/></Policies></RollingFile></Appenders><Loggers><Rootlevel="DEBUG"additivity="false"><AppenderRefref="console"/><AppenderRefref="rollingFile"/></Root></Loggers></Configuration>
TimeBasedTriggeringPolicy
Intervall (Ganzzahl) - Wie oft ein Rollover basierend auf der spezifischsten Zeiteinheit im Datumsmuster erfolgen soll. Beispielsweise würde bei einem Datumsmuster mit Stunden als spezifischstem Element und einem Inkrement von 4 Rollovers alle 4 Stunden auftreten. Der Standardwert ist 1.
modulieren (boolesch) - Gibt an, ob das Intervall angepasst werden soll, damit der nächste Rollover an der Intervallgrenze auftritt. Wenn der Artikel beispielsweise Stunden ist, die aktuelle Stunde 3 Uhr morgens und das Intervall 4 ist, erfolgt der erste Rollover um 4 Uhr morgens und die nächsten um 8 Uhr morgens, 12 Uhr mittags, 16 Uhr usw.
log4j2 verfügt über ein sehr flexibles Konfigurationssystem (das meiner Meinung nach eher eine Ablenkung als eine Hilfe ist). Sie können sogar JSON verwenden. Siehe https://logging.apache.org/log4j/2.x/manual/configuration.htmlEine Referenz finden .
Persönlich habe ich erst kürzlich angefangen, log4j2 zu verwenden, aber ich tendiere zur "strengen XML" -Konfiguration (dh zur Verwendung von Attributen anstelle von Elementnamen), die schemavalidiert werden kann.
Hier ist mein einfaches Beispiel für die automatische Konfiguration und den strengen Modus mit einer "Eigenschaft" zum Festlegen des Dateinamens:
<?xml version="1.0" encoding="UTF-8"?><Configurationmonitorinterval="30"status="info"strict="true"><Properties><Propertyname="filename">log/CelsiusConverter.log</Property></Properties><Appenders><Appendertype="Console"name="Console"><Layouttype="PatternLayout"pattern="%d %p [%t] %m%n"/></Appender><Appendertype="Console"name="FLOW"><Layouttype="PatternLayout"pattern="%C{1}.%M %m %ex%n"/></Appender><Appendertype="File"name="File"fileName="${filename}"><Layouttype="PatternLayout"pattern="%d %p %C{1.} [%t] %m%n"/></Appender></Appenders><Loggers><Rootlevel="debug"><AppenderRefref="File"/><AppenderRefref="Console"/><!-- Use FLOW to trace down exact method sending the msg --><!-- <AppenderRef ref="FLOW" /> --></Root></Loggers></Configuration>
Die flexible Konfiguration ist praktisch, wenn Sie versuchen, die Konfiguration von der Erstellung zu trennen und die Konfiguration an anderer Stelle in einem Repository abzulegen. Leider macht die Komplexität es etwas nervig, aber ich dachte nur, ich würde den flexiblen Konfigurationsoptionen einen Vorteil verschaffen.
Adprocas
Was ist die FilePolitik hier? Was ist die maximale Dateigröße? Und wie schreibt es in eine Datei? (Enthält die Datei immer die letzten 10 MB Protokolle?)
Antworten:
Anmerkungen:
Logger logger = LogManager.getLogger();
Sie diese Option, um Ihren Logger zu initialisierenquelle
Hier ist meine Vereinfachung
log4j2.xml
, die auf der Konsole druckt und in eine tägliche fortlaufende Datei schreibt:Ausgabe:
Täglich wird eine neue Protokolldatei erstellt, wobei der vorherige Tag automatisch in Folgendes umbenannt wird:
cucumber_yyyy-MM-dd.log
In einem Maven-Projekt würden Sie das
log4j2.xml
insrc/main/resources
oder einfügensrc/test/resources
.quelle
log4j2 verfügt über ein sehr flexibles Konfigurationssystem (das meiner Meinung nach eher eine Ablenkung als eine Hilfe ist). Sie können sogar JSON verwenden. Siehe https://logging.apache.org/log4j/2.x/manual/configuration.htmlEine Referenz finden .
Persönlich habe ich erst kürzlich angefangen, log4j2 zu verwenden, aber ich tendiere zur "strengen XML" -Konfiguration (dh zur Verwendung von Attributen anstelle von Elementnamen), die schemavalidiert werden kann.
Hier ist mein einfaches Beispiel für die automatische Konfiguration und den strengen Modus mit einer "Eigenschaft" zum Festlegen des Dateinamens:
quelle
File
Politik hier? Was ist die maximale Dateigröße? Und wie schreibt es in eine Datei? (Enthält die Datei immer die letzten 10 MB Protokolle?)