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.)
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.)
Réponses:
<?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>
Remarques:
Logger logger = LogManager.getLogger();
pour initialiser votre enregistreurVoici mon simpliste log4j2.xml
qui imprime sur la console et écrit dans un fichier tournant 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) - La fréquence à laquelle un roulement doit se produire en fonction de l'unité de temps la plus spécifique dans le modèle de date. Par exemple, avec un modèle de date avec les heures comme élément le plus spécifique et un incrément de 4 survols se produirait toutes les 4 heures. La valeur par défaut est 1.
moduler (booléen) - Indique si l'intervalle doit être ajusté pour provoquer le prochain basculement sur la limite d'intervalle. Par exemple, si l'élément est des heures, l'heure actuelle est de 3 heures du matin et l'intervalle est de 4, alors le premier survol aura lieu à 4 heures du matin, puis les prochains auront lieu à 8 heures, midi, 16 heures, etc.
Source: https://logging.apache.org/log4j/2.x/manual/appenders.html
Production:
[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 et le jour précédent sera automatiquement renommé:
cucumber_yyyy-MM-dd.log
Dans un projet Maven, vous mettriez le log4j2.xml
dans src/main/resources
ou src/test/resources
.
log4j2 a un système de configuration très flexible (qui à mon humble avis 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 j'ai tendance à privilégier la configuration "XML stricte" (c'est-à-dire à utiliser des attributs au lieu des noms d'éléments), qui peut être validée par le schéma.
Voici mon exemple simple utilisant la configuration automatique et le mode strict, en utilisant une "propriété" pour définir le nom de 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>
File
politique ici? Quelle est la taille maximale du fichier? Et comment écrit-il dans un fichier? (le fichier contient-il toujours les 10 derniers Mo de journaux?)