Vorrei un file di configurazione XML molto semplice con una console e un appender di file usando log4j2.
(Il sito Web Apache mi sta uccidendo con molte informazioni.)
Vorrei un file di configurazione XML molto semplice con una console e un appender di file usando log4j2.
(Il sito Web Apache mi sta uccidendo con molte informazioni.)
Risposte:
<?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>
Appunti:
Logger logger = LogManager.getLogger();
per inizializzare il loggerEcco il mio semplicistico log4j2.xml
che stampa su console e scrive su un file rolling giornaliero:
// 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
intervallo (numero intero) : la frequenza con cui deve verificarsi un rollover in base all'unità di tempo più specifica nel modello di data. Ad esempio, con un modello di data con le ore come l'elemento più specifico e l'incremento di 4 rollover si verificherebbe ogni 4 ore. Il valore predefinito è 1.
modulate (boolean) - Indica se l'intervallo deve essere regolato in modo che si verifichi il passaggio successivo al limite dell'intervallo. Ad esempio, se l'elemento è ore, l'ora corrente è 3 e l'intervallo è 4, quindi il primo rollover avverrà alle 4 del mattino e poi i successivi avverranno alle 8, mezzogiorno, 16:00, ecc.
Fonte: https://logging.apache.org/log4j/2.x/manual/appenders.html
Produzione:
[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
Un nuovo file di registro verrà creato ogni giorno con il giorno precedente rinominato automaticamente in:
cucumber_yyyy-MM-dd.log
In un progetto Maven, si dovrebbe mettere la log4j2.xml
in src/main/resources
o src/test/resources
.
log4j2 ha un sistema di configurazione molto flessibile (che IMHO è più una distrazione che un aiuto), puoi persino usare JSON. Vedi https://logging.apache.org/log4j/2.x/manual/configuration.html per un riferimento.
Personalmente, ho appena iniziato a utilizzare log4j2, ma mi sto orientando verso la configurazione "XML rigoroso" (ovvero, utilizzando attributi anziché nomi di elementi), che può essere convalidato dallo schema.
Ecco il mio semplice esempio usando autoconfigurazione e modalità rigorosa, usando una "Proprietà" per impostare il nome file:
<?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
politica qui? Qual è la dimensione massima del file? E come scrive nel file? (il file contiene sempre gli ultimi 10 MB di log?)