Ich möchte eine sehr einfache XML-Konfigurationsdatei mit einer Konsole und einem Dateianhänger unter Verwendung von log4j2.
(Die Apache-Website bringt mich mit vielen Informationen um.)
Ich möchte eine sehr einfache XML-Konfigurationsdatei mit einer Konsole und einem Dateianhänger unter Verwendung von log4j2.
(Die Apache-Website bringt mich mit vielen Informationen um.)
Antworten:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<File name="MyFile" fileName="all.log" immediateFlush="false" append="false">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
Anmerkungen:
Logger logger = LogManager.getLogger();
Sie diese Option, um Ihren Logger zu initialisierenHier 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"?>
<Configuration status="WARN">
<Properties>
<Property name="logPath">target/cucumber-logs</Property>
<Property name="rollingFileName">cucumber</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}" />
</Console>
<RollingFile name="rollingFile" fileName="${logPath}/${rollingFileName}.log" filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log">
<PatternLayout pattern="[%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 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="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.
Quelle: https://logging.apache.org/log4j/2.x/manual/appenders.html
Ausgabe:
[INFO ] 2018-07-21 12:03:47,412 ScenarioHook.beforeScenario() - Browser=CHROME32_NOHEAD
[INFO ] 2018-07-21 12:03:48,623 ScenarioHook.beforeScenario() - Screen Resolution (WxH)=1366x768
[DEBUG] 2018-07-21 12:03:52,125 HomePageNavigationSteps.I_Am_At_The_Home_Page() - Base URL=http://simplydo.com/projector/
[DEBUG] 2018-07-21 12:03:52,700 NetIncomeProjectorSteps.I_Enter_My_Start_Balance() - Start Balance=348000
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
in src/main/resources
oder einfügen src/test/resources
.
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"?>
<Configuration monitorinterval="30" status="info" strict="true">
<Properties>
<Property name="filename">log/CelsiusConverter.log</Property>
</Properties>
<Appenders>
<Appender type="Console" name="Console">
<Layout type="PatternLayout" pattern="%d %p [%t] %m%n" />
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n" />
</Appender>
<Appender type="File" name="File" fileName="${filename}">
<Layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n" />
</Appender>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="File" />
<AppenderRef ref="Console" />
<!-- Use FLOW to trace down exact method sending the msg -->
<!-- <AppenderRef ref="FLOW" /> -->
</Root>
</Loggers>
</Configuration>
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?)