Java Language
log4j / log4j2
Suche…
Einführung
Apache Log4j ist ein Java-basiertes Protokollierungsdienstprogramm. Es ist eines von mehreren Java-Protokollierungsframeworks. In diesem Thema wird gezeigt, wie Log4j in Java eingerichtet und konfiguriert wird, und enthält detaillierte Beispiele zu allen möglichen Aspekten der Verwendung.
Syntax
- Logger.debug ("zu protokollierender Text"); // Debugging-Informationen protokollieren
- Logger.info ("zu protokollierender Text"); // Allgemeine Informationen protokollieren
- Logger.error ("zu protokollierender Text"); // Fehlerinformationen protokollieren
- Logger.warn ("zu protokollierender Text"); // Warnungen protokollieren
- Logger.trace ("zu protokollierender Text"); // Trace-Informationen protokollieren
- Logger.fatal ("zu protokollierender Text"); // Protokollierung schwerwiegender Fehler
- Log4j2-Verwendung mit Parameterprotokollierung:
- Logger.debug ("Debug-Parameter {} {} {}", param1, param2, param3); // Protokollieren des Debuggens mit Parametern
- Logger.info ("Info-Parameter {} {} {}", param1, param2, param3); // Protokollieren von Informationen mit Parametern
- Logger.error ("Fehlerparameter {} {} {}", param1, param2, param3); // Protokollierungsfehler mit Parametern
- Logger.warn ("Parameter warnen {} {} {}", Parameter1, Parameter2, Parameter3); // Warnungen mit Parametern protokollieren
- Logger.trace ("Trace-Parameter {} {} {}", param1, param2, param3); // Ablaufverfolgung mit Parametern protokollieren
- Logger.fatal ("fatale Parameter {} {} {}", param1, param2, param3); // Protokollierung mit Parametern fatal
- Logger.error ("Ausnahme beim Abfangen:", ex); // Ausnahme mit Protokollierung und Stacktrace protokollieren (wird automatisch angehängt)
Bemerkungen
End of Life für Log4j 1 erreicht
Am 5. August 2015 gab das Logging Services Project Management Committee bekannt, dass Log4j 1.x das Ende seiner Lebensdauer erreicht hat. Den vollständigen Text der Ankündigung finden Sie im Apache-Blog. Benutzern von Log4j 1 wird empfohlen, auf Apache Log4j 2 zu aktualisieren .
Wie erhalte ich Log4j?
Aktuelle Version (log4j2)
Maven benutzen:
Fügen Sie Ihrer POM.xml
Datei die folgende Abhängigkeit 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>
Ivy verwenden:
<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>
Verwenden von 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'
}
Log4j 1.x bekommen
Hinweis: Log4j 1.x hat das End-of-Life (EOL) erreicht (siehe Anmerkungen).
Maven benutzen:
Deklarieren Sie diese Abhängigkeit in der POM.xml
Datei:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Ivy verwenden:
<dependency org="log4j" name="log4j" rev="1.2.17"/>
Usign Gradle:
compile group: 'log4j', name: 'log4j', version: '1.2.17'
Buildr verwenden:
'log4j:log4j:jar:1.2.17'
Manuelles Hinzufügen in der Pfaderstellung:
Laden Sie es vom Log4j- Website-Projekt herunter
So verwenden Sie Log4j in Java-Code
Zuerst müssen Sie ein final static logger
erstellen:
final static Logger logger = Logger.getLogger(classname.class);
Rufen Sie dann Protokollierungsmethoden auf:
//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);
Eigenschaftendatei einrichten
Log4j gibt Ihnen die Möglichkeit, Daten gleichzeitig in Konsole und Datei einzuloggen. Erstellen Sie eine log4j.properties
Datei und log4j.properties
diese Basiskonfiguration ein:
# 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
Wenn Sie Maven verwenden, geben Sie diese Eigenschaftendatei in den Pfad ein:
/ProjectFolder/src/java/resources
Grundlegende Konfigurationsdatei für 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>
Dies ist eine grundlegende Konfiguration von log4j2.xml mit einem Konsolen-Appender und einem Root-Logger. Das Musterlayout gibt an, welches Muster für die Protokollierung der Anweisungen verwendet werden soll.
Um das Laden von log4j2.xml zu debuggen, können Sie das Attribut status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO>
im Konfigurations-Tag Ihrer log4j2.xml.
Sie können auch ein Überwachungsintervall hinzufügen, damit die Konfiguration nach dem angegebenen Intervall erneut geladen wird. Das Überwachungsintervall kann wie folgt zum Konfigurationstag hinzugefügt werden: monitorInterval = 30
. Das bedeutet, dass die Konfiguration alle 30 Sekunden geladen wird.
Migration von log4j 1.x nach 2.x
Wenn Sie aus Ihrem vorhandenen log4j 1.x-System zu log4j 2.x migrieren möchten, entfernen Sie alle vorhandenen log4j 1.x-Abhängigkeiten und fügen Sie die folgende Abhängigkeit hinzu:
Log4j 1.x API Bridge
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 Wenn in Ihrem Projekt Apache Commons Logging verwendet wird, das log4j 1.x verwendet und Sie es auf log4j 2.x migrieren möchten, fügen Sie die folgenden Abhängigkeiten hinzu:
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'
}
Hinweis: Entfernen Sie keine vorhandenen Abhängigkeiten der Apache-Commons-Protokollierung
Referenz: https://logging.apache.org/log4j/2.x/maven-artifacts.html
Eigenschaften-Datei zur Anmeldung an der DB
Für dieses Beispiel benötigen Sie einen JDBC-Treiber, der mit dem System kompatibel ist, auf dem die Datenbank ausgeführt wird. Eine Open Source-Ressource , mit der Sie eine Verbindung zu DB2-Datenbanken auf einem IBM System i herstellen können, finden Sie hier: JT400
Obwohl dieses Beispiel DB2-spezifisch ist, funktioniert es für fast jedes andere System, wenn Sie den Treiber austauschen und die JDBC-URL anpassen.
# 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
Logoutput nach Stufe filtern (log4j 1.x)
Sie können einen Filter verwenden , um nur Nachrichten „tiefer“ als zB log ERROR
Ebene. Der Filter wird jedoch nicht von PropertyConfigurator unterstützt. Daher müssen Sie zur Verwendung der XML-Konfiguration wechseln . Siehe log4j-Wiki zu Filtern .
Beispiel "spezifische Ebene"
<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>
Oder "Pegelbereich"
<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>