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 .

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

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>


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow