J'ai défini l' immédiatFlush = "false" car c'est mieux pour la durée de vie du SSD . Si vous avez besoin du journal immédiatement dans votre fichier journal, supprimez le paramètre ou définissez-le sur true
Pour être complet, l'utilisation de immediateFlush = "false" est particulièrement recommandée lors de l'utilisation d'Async Loggers ou AsyncAppender.
Remko Popma
1
Contexte: immediateFlush = "false" permet aux composants asynchrones de Log4J2 de regrouper plusieurs événements de journal en une seule écriture de disque. En prime, vos événements de journal les plus récents sont toujours écrits sur le disque et ne restent jamais suspendus dans une mémoire tampon. (Quelque chose que j'ai trouvé ennuyeux à propos de log4j-1.2.)
Remko Popma
1
Je n'ai pas pu faire fonctionner les exemples sur le site Log4j 2.0 mais celui-ci l'a fait. Je vous remercie.
djangofan
12
Veuillez ajouter le fait qu'un nettoyage peut être requis pour ceux qui utilisent Eclipse. Pour le bien de l'humanité.
Reut Sharabani
1
@ThorstenNiehues Je ne peux pas modifier mon commentaire précédent, mais eclipse copie la configuration lorsque vous construisez, et pour une raison quelconque, il ne copie pas toujours le log4j.xml même s'il a changé. Du moins, c'est ce qui l'a résolu pour moi.
Reut Sharabani
19
Voici mon simpliste log4j2.xmlqui 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"?><Configurationstatus="WARN"><Properties><Propertyname="logPath">target/cucumber-logs</Property><Propertyname="rollingFileName">cucumber</Property></Properties><Appenders><Consolename="console"target="SYSTEM_OUT"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/></Console><RollingFilename="rollingFile"fileName="${logPath}/${rollingFileName}.log"filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log"><PatternLayoutpattern="[%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 --><TimeBasedTriggeringPolicyinterval="1"modulate="true"/></Policies></RollingFile></Appenders><Loggers><Rootlevel="DEBUG"additivity="false"><AppenderRefref="console"/><AppenderRefref="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.
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"?><Configurationmonitorinterval="30"status="info"strict="true"><Properties><Propertyname="filename">log/CelsiusConverter.log</Property></Properties><Appenders><Appendertype="Console"name="Console"><Layouttype="PatternLayout"pattern="%d %p [%t] %m%n"/></Appender><Appendertype="Console"name="FLOW"><Layouttype="PatternLayout"pattern="%C{1}.%M %m %ex%n"/></Appender><Appendertype="File"name="File"fileName="${filename}"><Layouttype="PatternLayout"pattern="%d %p %C{1.} [%t] %m%n"/></Appender></Appenders><Loggers><Rootlevel="debug"><AppenderRefref="File"/><AppenderRefref="Console"/><!-- Use FLOW to trace down exact method sending the msg --><!-- <AppenderRef ref="FLOW" /> --></Root></Loggers></Configuration>
La configuration flexible est utile lorsque vous essayez de séparer la configuration de la construction et de placer la configuration dans un référentiel ailleurs. Malheureusement, les complexités le rendent un peu ennuyeux, mais je pensais juste que je mettrais à profit les options flexibles de configuration.
adprocas
Quelle est la Filepolitique 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?)
Réponses:
Remarques:
Logger logger = LogManager.getLogger();
pour initialiser votre enregistreurla source
Voici mon simpliste
log4j2.xml
qui imprime sur la console et écrit dans un fichier tournant quotidien:Production:
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
danssrc/main/resources
ousrc/test/resources
.la source
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:
la source
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?)