Je veux faire deux choses:
La journalisation de la console semble fonctionner correctement, mais le fichier journal reste vide.
C'est mon log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<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="logs/app.log" immediateFlush="true">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<logger name="filelogger" level="error">
<appender-ref ref="MyFile"/>
</logger>
<root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
Quel est le problème?
Je l'ai compris! La balise <Logger>
ne doit pas être utilisée dans ce cas, voir la réponse de Gaurang Patel pour plus de détails.
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<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="logs/app.log">
<PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console" level="info"/>
<appender-ref ref="MyFile" level="error"/>
</root>
</loggers>
</configuration>
Bien que Daker ait mis le fichier de configuration corrigé, il ne l’a pas expliqué. Je voudrais ajouter une explication ici. Comme indiqué dans la documentation Log4j2 ici , l'utilisation de la balise <Logger> n'était pas nécessaire pour l'exigence donnée. Plus loin quand vous devriez utiliser la balise <Logger>? Lisez ci-dessous les explications de la documentation,
Peut-être est-il souhaitable d'éliminer toute la sortie TRACE de tout sauf com.foo.Bar. Changer simplement le niveau de log ne serait pas accomplir la tâche. Au lieu de cela, la solution consiste à ajouter un nouvel enregistreur définition à la configuration:
<Loggers>
<Logger name="com.foo.Bar" level="TRACE"/>
<Root level="ERROR">
<AppenderRef ref="STDOUT">
</Root>
...
</Loggers>
<logger name="filelogger" level="error" >
Cela devrait être le problème. Le nom du consignateur correspond généralement au nom de votre package (à moins que vous ne l’ayez spécifiquement nommé filelogger
).
Essayez <logger name="com.yourpackage" level="error" additivity="true">
Référez-vous Log4j2 Doc
J'utilise <ThresholdFilter />
et <AppenderRef level="">
pour le faire
VOIR
<ThresholdFilter level = "error" onMatch = "DENY" onMismatch = "ACCEPT" />
<AppenderRef ref = "fileLogger" level = "info" />
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" monitorInterval="5"> <!-- status:error mean ONLY show log4j kernel's error log in console-->
<Properties>
<Property name="APP_LOG_ROOT">Your log's path</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
<RollingFile name="fileLogger" fileName="${APP_LOG_ROOT}/app.log" filePattern="${APP_LOG_ROOT}/app-%d{yyyy-MM-dd}.log">
<!-- Except Error -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"/>
<PatternLayout>
<pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
<RollingFile name="errorLogger" fileName="${APP_LOG_ROOT}/error.log" filePattern="${APP_LOG_ROOT}/error-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="trace" >
<AppenderRef ref="Console" level="trace" />
<AppenderRef ref="fileLogger" level="info" />
<AppenderRef ref="errorLogger" level="error" />
</Root>
</Loggers>
</Configuration>