[JAVA] Comprendre le mécanisme de base de log4j2.xml

Motivation, hypothèses, etc.

Chaque fois que j'ai touché log4j pour la première fois depuis longtemps, j'ai complètement oublié comment l'utiliser, alors j'ai décidé de comprendre la structure à ma manière. «Parce que c'était une excellente opportunité, je voulais d'abord comprendre la structure de base, donc je spécifie essentiellement les options autant que possible. De plus, comme il est limité à l'utilisation de base, les paramètres souvent utilisés dans le développement réel sont parfois coupés.

Environnement utilisé

Source Java pour générer les journaux

logger.fatal("fatal!");
logger.error("error!");
logger.warn("warn!");
logger.info("info!");
logger.debug("debug!");
logger.trace("trace!");

0. Lorsqu'il n'y a pas de fichier de réglage

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging.
15:51:56.904 [main] FATAL Test - fatal!
15:51:56.907 [main] ERROR Test - error!

1. Fichier de configuration minimum

log4j2.xml


<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
</Configuration>

Si vous décrivez jusqu'à présent, le journal sera sorti dans le format par défaut sans qu'aucune erreur ne se produise.

16:52:31.453 [main] FATAL Test - fatal!
16:52:31.453 [main] ERROR Test - error!

référence: http://logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax http://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticConfiguration

2. Appender et enregistreur minimal

Une combinaison de Console Appender sans options et de RootLogger avec juste cela. Le nom donné par l'attribut name de ʻAppender est associé en le spécifiant par l'attribut ref de ʻAppenderRef de Logger.

log4j.xml


<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="STDOUT">
        </Console>
    </Appenders>
    <Loggers>
        <Root>
            <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>
</Configuration>
fatal!
error!

Un simple journal contenant uniquement les messages est généré.

--Appender définit la destination de sortie du journal (méthode de sortie), la disposition de sortie, etc. --Logger spécifie la cible de sortie du journal et l'appendeur à utiliser. Plusieurs Appenders peuvent être spécifiés. Même si vous ne spécifiez pas Appender, aucune erreur ne se produira, mais bien sûr, le journal ne sera affiché nulle part.

--Console Appender utilise par défaut la sortie standard. Si vous souhaitez effectuer une sortie vers la sortie d'erreur standard, spécifiez target = "SYSTEM_ERR".

<Root level="info">
fatal!
error!
warn!
info!

référence: http://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers http://logging.apache.org/log4j/2.x/manual/configuration.html#Appenders

3. Spécifications de mise en page

Pour spécifier la disposition de sortie, spécifiez Disposition pour Appender.

<Console name="STDOUT">
    <PatternLayout pattern="%d %p %m%n"/>
</Console>
2017-10-24 18:12:23,469 FATAL fatal!
2017-10-24 18:12:23,472 ERROR error!
2017-10-24 18:12:23,472 WARN warn!
2017-10-24 18:12:23,472 INFO info!

Référence: http://logging.apache.org/log4j/2.x/manual/layouts.html

4. Enregistreur enfant

Définissez un enregistreur enfant de RootLogger si nécessaire.

<Loggers>
    <Logger name="Test">
        <AppenderRef ref="STDOUT"/>
    </Logger>
    <Root>
        <AppenderRef ref="STDOUT"/>
    </Root>
</Loggers>

--L'attribut name est requis pour le Logger enfant, et la classe ou le package à journaliser est spécifié ici.

2017-10-25 13:06:51,840 FATAL fatal!
2017-10-25 13:06:51,840 FATAL fatal!
2017-10-25 13:06:51,840 ERROR error!
2017-10-25 13:06:51,840 ERROR error!

Puisque Logger se propage de l'enfant au parent, les journaux sont émis deux fois si les conditions de sortie du journal sont les mêmes. Pour supprimer la propagation, spécifiez additivity = "false" dans le Logger enfant.

<Logger name="Test" additivity="false">
2017-10-25 13:15:59,282 FATAL fatal!
2017-10-25 13:15:59,282 ERROR error!

Puisque RootLogger n'a pas de parent, l'additivité ne peut pas être spécifiée.

Référence: http://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity

5. Filtre

Le filtre est utilisé lorsque vous souhaitez contrôler la sortie ou non du journal uniquement dans des conditions spécifiques. Les filtres peuvent être définis aux quatre emplacements suivants.

--Configuration --Filtre pour tout le contexte --Logger --Filtre pour un enregistreur spécifique --Appender --Filtre pour un Appender spécifique --AppenderRef --Filtre pour un Logger x Appender spécifique

Lorsque le journal est sorti, il est estimé que le filtre est appliqué et l'un des trois états suivants est renvoyé.

--ACCEPT - Sortie de journal confirmée --DENY --Log non-sortie confirmée --NEUTRAL --Transfert le jugement au filtre suivant

<Configuration>
    <RegexFilter regex=".*err.*"/>

Si vous souhaitez spécifier plusieurs filtres, placez-les dans Filtres.

<Configuration>
    <Filters>
        <RegexFilter regex=".*err.*"/>
        <TimeFilter start="9:00:00" end="17:00:00"/>
    </Filters>

--Si plusieurs filtres sont définis, le jugement sera effectué dans l'ordre défini. --Si ACCEPTER ou REFUSER est retourné, le jugement est confirmé à ce stade et le jugement des filtres restants n'est pas effectué. --Si NEUTRAL est renvoyé, le jugement passe au filtre suivant. --Si le filtre suivant n'est plus disponible, il sera traité comme ACCEPTER.

Référence: http://logging.apache.org/log4j/2.x/manual/filters.html

6. Propriétés

Les valeurs de propriété peuvent être définies et référencées dans le fichier de configuration.

<Configuration>
    <Properties>
        <Property name="myPattern">%d %p %m%n</Property>
    </Properties>
    <Appenders>
        <Console name="STDOUT">
            <PatternLayout pattern="${myPattern}"/>

Il peut être utilisé pour extraire des éléments communs et des valeurs littérales.

Référence: http://logging.apache.org/log4j/2.x/manual/configuration.html#Properties

7. Référence de valeur

Diverses valeurs telles que les variables d'environnement système et les propriétés système peuvent être référencées dans le fichier de paramètres.

Référence: http://logging.apache.org/log4j/2.x/manual/lookups.html

8. Script

Il existe des mécanismes qui fonctionnent à l'aide de scripts, tels que ScriptFilter et ScriptPatternSelector. Le script peut être écrit directement dans le fichier de configuration ou le fichier de script peut être référencé. Dans le premier cas, utilisez la balise «

Recommended Posts

Comprendre le mécanisme de base de log4j2.xml
Comprendre les bases de l'enregistrement audio Android
Comprendre l'échantillon officiel Coffee of Dagger2
Apprenez le mécanisme rudimentaire et l'utilisation de Gradle 4.4
[Pour les débutants] Comprendre rapidement les bases de Java 8 lambda
Comprendre les caractéristiques de Scala en 5 minutes (Introduction à Scala)
Jugement du calendrier
Le monde de Clara-Rules (4)
Traitement d'image: structure de base de l'image lue par le programme
Le monde de Clara-Rules (1)
Comprenons la fonction!
Le monde de Clara-Rules (3)
Le monde de Clara-Rules (5)
L'idée du tri rapide
L'idée de jQuery
Je n'ai pas vraiment compris le comportement de Java Scanner et .nextLine ()
Passez en revue les connaissances de base du rubis souvent oubliées
J'ai brièvement résumé la grammaire de base de Ruby
Suivre le mémorandum d'association de fonction (comprendre la description du modèle utilisateur)
Viser une compréhension de base du flux de traitement récursif
À propos de la gestion de Null
Contexte et mécanisme de Fabric-loader
Surveillance Docker-expliquant les bases des bases-
[Docker] Introduction de l'instruction de base de Docker
À propos de la description de Docker-compose.yml
Le jeu d'instancier java.lang.Void
Comprenons la déclaration if!
Comprenons la déclaration de garde!
Comprendre la méthode d'assistance form_with
Utilisation super basique d'Eclipse
Valeur médiane de trois valeurs
[Ruby] Liste des commandes de base
Comprenons la déclaration for-in!
L'illusion de l'orientation objet
Comprenons l'instruction switch!
Résumé des fonctions de base d'ImageJ
J'ai étudié le mécanisme d'attr_accessor (* Hoge :: ATTRIBUTES) que je vois parfois
Je veux comprendre le flux des paramètres de demande de traitement Spring
Le point addictif lors de l'authentification de base avec Java URLConnection