Je voudrais un fichier de configuration XML très simple avec une console et un appender de fichier utilisant log4j2.
(Le site Web Apache me tue avec beaucoup d'informations.)
<?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>
Notes:
Logger logger = LogManager.getLogger();
pour initialiser votre enregistreurVoici mon log4j2.xml
simpliste qui imprime sur la console et écrit dans un fichier roulant quotidien:
// 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
intervalle (entier) - Fréquence à laquelle une substitution doit avoir lieu en fonction de l'unité de temps la plus spécifique du modèle de date. Par exemple, avec un modèle de date avec les heures comme élément le plus spécifique et une incrémentation de 4 renversements se produisant toutes les 4 heures. La valeur par défaut est 1.
modulate (boolean) - Indique si l'intervalle doit être ajusté pour que le prochain basculement ait lieu sur la limite de l'intervalle. Par exemple, si l'élément est heures, si l'heure actuelle est 3 heures et l'intervalle est 4, le premier basculement aura lieu à 4 heures du matin et les suivants à 8 heures, midi, 16 heures, etc.
Source: https://logging.Apache.org/log4j/2.x/manual/appenders.html
Sortie:
[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 nouveau fichier journal sera créé quotidiennement avec le jour précédent automatiquement renommé en:
cucumber_yyyy-MM-dd.log
Dans un projet Maven, vous placeriez le log4j2.xml
dans src/main/resources
ou src/test/resources
.
log4j2 a un système de configuration très flexible (IMHO est plus une distraction qu'une aide), vous pouvez même utiliser JSON. Voir https://logging.Apache.org/log4j/2.x/manual/configuration.html pour une référence.
Personnellement, j'ai récemment commencé à utiliser log4j2, mais je suis plutôt orienté vers la configuration "XML strict" (c'est-à-dire l'utilisation d'attributs plutôt que de noms d'éléments), qui peut être validée par un schéma.
Voici mon exemple simple d'utilisation de la configuration automatique et du mode strict, en utilisant une "propriété" pour définir le nom du fichier:
<?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>