Java Language
log4j / log4j2
Ricerca…
introduzione
Apache Log4j è un'utilità di registrazione basata su Java, è uno dei numerosi framework di registrazione Java. Questo argomento mostra come configurare e configurare Log4j in Java con esempi dettagliati su tutti i suoi possibili aspetti di utilizzo.
Sintassi
- Logger.debug ("testo da registrare"); // Registrazione delle informazioni di debug
- Logger.info ("testo da registrare"); // Registrazione delle informazioni comuni
- Logger.error ("testo da registrare"); // Registrazione delle informazioni di errore
- Logger.warn ("testo da registrare"); // Avvisi di registrazione
- Logger.trace ("testo da registrare"); // Registrazione delle informazioni di traccia
- Logger.fatal ("testo da registrare"); // Registrazione degli errori fatali
- Utilizzo di Log4j2 con la registrazione dei parametri:
- Logger.debug ("Parametri di debug {} {} {}", param1, param2, param3); // Registrazione del debug con i parametri
- Logger.info ("Info params {} {} {}", param1, param2, param3); // Registrazione delle informazioni con parametri
- Logger.error ("Parametri di errore {} {} {}", param1, param2, param3); // Errore di registrazione con parametri
- Logger.warn ("Warn params {} {} {}", param1, param2, param3); // Registrazione degli avvisi con i parametri
- Logger.trace ("Parametri di traccia {} {} {}", param1, param2, param3); // Registrazione traccia con parametri
- Logger.fatal ("Parametri fatali {} {} {}", param1, param2, param3); // Registrazione fatale con parametri
- Logger.error ("Caught Exception:", ex); // Registrazione dell'eccezione con messaggio e stacktrace (verrà automaticamente aggiunta)
Osservazioni
Fine vita per Log4j 1 raggiunto
Il 5 agosto 2015 il comitato di gestione dei progetti di servizi di registrazione ha annunciato che Log4j 1.x aveva raggiunto la fine della vita. Per il testo completo dell'annuncio, consultare il blog di Apache. Gli utenti di Log4j 1 sono consigliati per l'aggiornamento ad Apache Log4j 2 .
Come ottenere Log4j
Versione corrente (log4j2)
Usando Maven:
Aggiungi la seguente dipendenza al tuo file 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>
Utilizzando 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>
Utilizzando 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'
}
Ottenere log4j 1.x
Nota: Log4j 1.x ha raggiunto la fine vita (EOL) (vedere Note).
Usando Maven:
Dichiarare questa dipendenza nel file POM.xml
:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Utilizzando Ivy:
<dependency org="log4j" name="log4j" rev="1.2.17"/>
Usign Gradle:
compile group: 'log4j', name: 'log4j', version: '1.2.17'
Utilizzando Buildr:
'log4j:log4j:jar:1.2.17'
Aggiunta manuale nella compilazione del percorso:
Scarica dal progetto del sito web Log4j
Come usare Log4j nel codice Java
Innanzitutto occorre creare un oggetto final static logger
:
final static Logger logger = Logger.getLogger(classname.class);
Quindi, chiama i metodi di registrazione:
//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);
Impostazione del file delle proprietà
Log4j ti dà la possibilità di registrare i dati in console e file contemporaneamente. Crea un file log4j.properties
e inserisci questa configurazione di 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
Se stai usando Maven, metti questo file appropriato nel percorso:
/ProjectFolder/src/java/resources
File di configurazione di 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>
Questa è una configurazione base di log4j2.xml che ha un appender della console e un logger root. Il layout del modello specifica quale modello deve essere utilizzato per la registrazione delle istruzioni.
Per eseguire il debug del caricamento di log4j2.xml è possibile aggiungere lo status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO>
dell'attributo status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO>
nel tag di configurazione del tuo log4j2.xml.
È inoltre possibile aggiungere un intervallo di monitoraggio in modo che carichi nuovamente la configurazione dopo il periodo di intervallo specificato. L'intervallo del monitor può essere aggiunto al tag di configurazione come segue: monitorInterval = 30
. Significa che la configurazione verrà caricata ogni 30 secondi.
Migrazione da log4j 1.x a 2.x
Se si desidera eseguire la migrazione da log4j 1.x esistente nel progetto a log4j 2.x, rimuovere tutte le dipendenze esistenti di log4j 1.x e aggiungere la seguente dipendenza:
Log4j 1.x Ponte API
Build Maven
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
Edera 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 Se il progetto utilizza Apache Commons Logging che utilizza log4j 1.x e si desidera migrarlo a log4j 2.x, aggiungere le seguenti dipendenze:
Build Maven
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
Edera 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'
}
Nota: non rimuovere alcuna dipendenza esistente dalla registrazione di Apache commons
Riferimento: https://logging.apache.org/log4j/2.x/maven-artifacts.html
Proprietà-File per accedere al DB
Per questo esempio, è necessario un driver JDBC compatibile con il sistema su cui è in esecuzione il database. Un opensource che consente di connettersi ai database DB2 su un sistema IBM i può essere trovato qui: JT400
Anche se questo esempio è specifico per DB2, funziona per quasi tutti gli altri sistemi se si scambia il driver e si adatta 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
Filtro Logoutput per livello (log4j 1.x)
È possibile utilizzare un filtro per registrare solo i messaggi "inferiori" rispetto al livello ERROR
. Ma il filtro non è supportato da PropertyConfigurator. Quindi è necessario passare alla configurazione XML per usarlo . Vedi log4j-Wiki sui filtri .
Esempio "livello specifico"
<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>
Oppure "Gamma di livelli"
<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>