Recherche…


Introduction

Apache Log4j est un utilitaire de journalisation basé sur Java, il s’agit de l’un des nombreux frameworks de journalisation Java. Cette rubrique explique comment configurer et configurer Log4j en Java avec des exemples détaillés sur tous les aspects possibles de son utilisation.

Syntaxe

  • Logger.debug ("text to log"); // Enregistrement des informations de débogage
  • Logger.info ("text to log"); // Enregistrement d'informations communes
  • Logger.error ("text to log"); // Informations d'erreur de journalisation
  • Logger.warn ("text to log"); // Avertissement de journalisation
  • Logger.trace ("text to log"); // Enregistrement des informations de trace
  • Logger.fatal ("text to log"); // Enregistrement des erreurs fatales
  • Utilisation de Log4j2 avec la journalisation des paramètres:
  • Logger.debug ("Paramètres de débogage {} {} {}", param1, param2, param3); // Déboguer le débogage avec les paramètres
  • Logger.info ("Info params {} {} {}", param1, param2, param3); // Informations de journalisation avec paramètres
  • Logger.error ("Erreur params {} {} {}", param1, param2, param3); // Erreur de journalisation avec les paramètres
  • Logger.warn ("Avertir params {} {} {}", param1, param2, param3); // Enregistrement des avertissements avec des paramètres
  • Logger.trace ("Trace params {} {} {}", param1, param2, param3); // Trace de trace avec paramètres
  • Logger.fatal ("Paramètres fatals {} {} {}", param1, param2, param3); // Enregistrement fatal avec des paramètres
  • Logger.error ("Exception Caught:", ex); // Exception de journalisation avec message et stacktrace (sera automatiquement ajouté)

Remarques

Fin de vie pour Log4j 1 atteint

Le 5 août 2015, le comité de gestion du projet Logging Services a annoncé que Log4j 1.x était en fin de vie. Pour le texte complet de l'annonce, veuillez consulter le blog Apache. Les utilisateurs de Log4j 1 sont invités à passer à Apache Log4j 2 .

De: http://logging.apache.org/log4j/1.2/

Comment obtenir Log4j

Version actuelle (log4j2)

En utilisant Maven:
Ajoutez la dépendance suivante à votre fichier POM.xml :

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.6.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.6.2</version>
  </dependency>
</dependencies>

En utilisant Ivy:

<dependencies>
  <dependency org="org.apache.logging.log4j" name="log4j-api" rev="2.6.2" />
  <dependency org="org.apache.logging.log4j" name="log4j-core" rev="2.6.2" />
</dependencies>

Utiliser Gradle:

dependencies {
  compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.6.2'
  compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.6.2'
}

Obtenir log4j 1.x


Remarque: Log4j 1.x a atteint la fin de vie (EOL) (voir Remarques).


En utilisant Maven:

Déclarez cette dépendance dans le fichier POM.xml :

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

En utilisant Ivy:

<dependency org="log4j" name="log4j" rev="1.2.17"/>

Utilisez Gradle:

compile group: 'log4j', name: 'log4j', version: '1.2.17'

Utiliser Buildr:

'log4j:log4j:jar:1.2.17'

Ajouter manuellement dans la construction du chemin:

Télécharger depuis le projet de site Web Log4j

Comment utiliser Log4j en code Java

Vous devez d'abord créer un objet de final static logger :

final static Logger logger = Logger.getLogger(classname.class);

Ensuite, appelez les méthodes de journalisation:

//logs an error message
logger.info("Information about some param: " + parameter); // Note that this line could throw a NullPointerException!

//in order to improve performance, it is advised to use the `isXXXEnabled()` Methods
if( logger.isInfoEnabled() ){
    logger.info("Information about some param: " + parameter);
}

// In log4j2 parameter substitution is preferable due to readability and performance
// The parameter substitution only takes place if info level is active which obsoletes the use of isXXXEnabled().
logger.info("Information about some param: {}" , parameter);

//logs an exception
logger.error("Information about some error: ", exception);

Configuration du fichier de propriétés

Log4j vous offre la possibilité de consigner les données dans la console et les fichiers en même temps. Créez un fichier log4j.properties et placez-le dans cette configuration de base:

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Si vous utilisez maven, placez ce fichier de propriétés dans le chemin:

/ProjectFolder/src/java/resources

Fichier de configuration de base log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="debug">
      <AppenderRef ref="STDOUT"/>
    </Root>
  </Loggers>
</Configuration>

Ceci est une configuration de base log4j2.xml qui a un appender console et un enregistreur racine. La disposition du modèle spécifie quel modèle doit être utilisé pour consigner les instructions.
Pour déboguer le chargement de log4j2.xml, vous pouvez ajouter l'attribut status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO> dans la balise de configuration de votre log4j2.xml.
Vous pouvez également ajouter un intervalle de surveillance pour qu'il charge à nouveau la configuration après la période d'intervalle spécifiée. L'intervalle de surveillance peut être ajouté à la balise de configuration comme suit: monitorInterval = 30 . Cela signifie que la configuration sera chargée toutes les 30 secondes.

Migration de log4j 1.x à 2.x

Si vous souhaitez migrer de log4j 1.x existant dans votre projet vers log4j 2.x, supprimez toutes les dépendances log4j 1.x existantes et ajoutez la dépendance suivante:

Pont API Log4j 1.x

Maven Build

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.6.2</version>
  </dependency>
</dependencies>

Ivy Build

<dependencies>
  <dependency org="org.apache.logging.log4j" name="log4j-1.2-api" rev="2.6.2" />
</dependencies>

Gradle Build

dependencies {
  compile group: 'org.apache.logging.log4j', name: 'log4j-1.2-api', version: '2.6.2'
}

Apache Commons Logging Bridge Si votre projet utilise Apache Commons Logging qui utilise log4j 1.x et que vous souhaitez le migrer vers log4j 2.x, ajoutez les dépendances suivantes:

Maven Build

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.6.2</version>
  </dependency>
</dependencies>

Ivy Build

<dependencies>
  <dependency org="org.apache.logging.log4j" name="log4j-jcl" rev="2.6.2" />
</dependencies>

Gradle Build

dependencies {
  compile group: 'org.apache.logging.log4j', name: 'log4j-jcl', version: '2.6.2'
}

Remarque: Ne supprimez aucune dépendance existante de la journalisation Apache commons

Référence: https://logging.apache.org/log4j/2.x/maven-artifacts.html

Fichier de propriétés pour se connecter à la base de données

Pour que cet exemple fonctionne, vous aurez besoin d'un pilote JDBC compatible avec le système sur lequel la base de données est exécutée. Un fichier opensource vous permettant de vous connecter aux bases de données DB2 sur un système IBM peut être trouvé ici: JT400

Même si cet exemple est spécifique à DB2, il fonctionne pour presque tous les autres systèmes si vous échangez le pilote et adaptez l’URL JDBC.

# Root logger option
log4j.rootLogger= ERROR, DB

# Redirect log messages to a DB2
# Define the DB appender   
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL (!!! adapt to your target system !!!)
log4j.appender.DB.URL=jdbc:as400://10.10.10.1:446/DATABASENAME;naming=system;errors=full;

# Set Database Driver (!!! adapt to your target system !!!)
log4j.appender.DB.driver=com.ibm.as400.access.AS400JDBCDriver

# Set database user name and password
log4j.appender.DB.user=USER
log4j.appender.DB.password=PASSWORD

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO DB.TABLENAME VALUES('%d{yyyy-MM-dd}','%d{HH:mm:ss}','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

Filtrer le flux de sortie par niveau (log4j 1.x)

Vous pouvez utiliser un filtre pour enregistrer uniquement les messages "inférieurs", par exemple, au niveau ERROR . Mais le filtre n'est pas pris en charge par PropertyConfigurator. Vous devez donc passer à la configuration XML pour l'utiliser . Voir log4j-Wiki sur les filtres .

Exemple "niveau spécifique"

<appender name="info-out" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="info.log"/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%m%n"/> 
            </layout> 
            <filter class="org.apache.log4j.varia.LevelMatchFilter">
                    <param name="LevelToMatch" value="info" />
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
            <filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender> 

Ou "Level range"

<appender name="info-out" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="info.log"/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%m%n"/> 
            </layout> 
            <filter class="org.apache.log4j.varia.LevelRangeFilter">
                    <param name="LevelMax" value="info"/>
                    <param name="LevelMin" value="info"/>
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
</appender>


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow