Zoeken…


Invoering

Apache Log4j is een op Java gebaseerd logging-programma, het is een van de verschillende Java-logging frameworks. Dit onderwerp laat zien hoe Log4j in Java moet worden ingesteld en geconfigureerd met gedetailleerde voorbeelden van alle mogelijke aspecten van het gebruik.

Syntaxis

  • Logger.debug ("text to log"); // Foutopsporingsinformatie loggen
  • Logger.info ("te loggen tekst"); // Algemene informatie vastleggen
  • Logger.error ("text to log"); // Foutinformatie bij het loggen
  • Logger.warn ("text to log"); // Logging-waarschuwingen
  • Logger.trace ("text to log"); // Traceerinformatie registreren
  • Logger.fatal ("text to log"); // Fatale fouten vastleggen
  • Log4j2-gebruik met parameterregistratie:
  • Logger.debug ("Debug params {} {} {}", param1, param2, param3); // Debuggen met parameters
  • Logger.info ("Info params {} {} {}", param1, param2, param3); // Logboekinformatie met parameters
  • Logger.error ("Error params {} {} {}", param1, param2, param3); // Logfout met parameters
  • Logger.warn ("Waarschuw params {} {} {}", param1, param2, param3); // Waarschuwingen vastleggen met parameters
  • Logger.trace ("Trace params {} {} {}", param1, param2, param3); // Logging trace met parameters
  • Logger.fatal ("Fatal params {} {} {}", param1, param2, param3); // Fataal registreren met parameters
  • Logger.error ("Caught Exception:", ex); // Logging-uitzondering met bericht en stacktrace (wordt automatisch toegevoegd)

Opmerkingen

Einde levensduur voor Log4j 1 bereikt

Op 5 augustus 2015 heeft het Logging Services Project Management Committee aangekondigd dat Log4j 1.x het einde van zijn levensduur heeft bereikt. Zie de Apache-blog voor de volledige tekst van de aankondiging. Gebruikers van Log4j 1 worden aanbevolen om te upgraden naar Apache Log4j 2 .

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

Hoe Log4j te krijgen

Huidige versie (log4j2)

Maven gebruiken:
Voeg de volgende afhankelijkheid toe aan uw POM.xml bestand:

<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 gebruiken:

<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>

Gradle gebruiken:

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 verkrijgen


Opmerking: Log4j 1.x heeft End-of-Life (EOL) bereikt (zie opmerkingen).


Maven gebruiken:

Verklaar deze afhankelijkheid in het POM.xml bestand:

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

Ivy gebruiken:

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

Usign Gradle:

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

Buildr gebruiken:

'log4j:log4j:jar:1.2.17'

Handmatig toevoegen in padopbouw:

Downloaden van Log4j- websiteproject

Hoe Log4j in Java-code te gebruiken

Eerst moet een final static logger object worden gemaakt:

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

Roep vervolgens de logboekmethoden aan:

//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);

Eigenschapsbestand instellen

Log4j geeft u de mogelijkheid om gegevens tegelijkertijd in de console en het bestand te registreren. Maak een log4j.properties bestand en plaats deze in deze basisconfiguratie:

# 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

Als u maven gebruikt, plaatst u dit propertie-bestand in het pad:

/ProjectFolder/src/java/resources

Standaard log4j2.xml-configuratiebestand

<?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>

Dit is een eenvoudige log4j2.xml-configuratie met een console-appender en een root-logger. De patroonlay-out geeft aan welk patroon moet worden gebruikt voor het vastleggen van de instructies.
Om het laden van log4j2.xml te debuggen, kunt u het kenmerk status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO> in de configuratietag van uw log4j2.xml.
U kunt ook een monitorinterval toevoegen zodat de configuratie na de opgegeven intervalperiode opnieuw wordt geladen. Het monitorinterval kan als volgt worden toegevoegd aan de configuratietag: monitorInterval = 30 . Dit betekent dat de configuratie elke 30 seconden wordt geladen.

Migreren van log4j 1.x naar 2.x

Als u van bestaande log4j 1.x in uw project naar log4j 2.x wilt migreren, verwijdert u alle bestaande log4j 1.x-afhankelijkheden en voegt u de volgende afhankelijkheid toe:

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 Als uw project Apache Commons Logging gebruikt die log4j 1.x gebruikt en u wilt migreren naar log4j 2.x, voeg dan de volgende afhankelijkheden toe:

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'
}

Opmerking: verwijder geen bestaande afhankelijkheden van de logboekregistratie van Apache Commons

Referentie: https://logging.apache.org/log4j/2.x/maven-artifacts.html

Eigenschappenbestand om in te loggen bij DB

Voor dit voorbeeld hebt u een JDBC-stuurprogramma nodig dat compatibel is met het systeem waarop de database wordt uitgevoerd. Een open source waarmee u verbinding kunt maken met DB2-databases op een IBM System i kunt u hier vinden: JT400

Hoewel dit voorbeeld DB2-specifiek is, werkt het voor bijna elk ander systeem als u het stuurprogramma uitwisselt en de JDBC-URL aanpast.

# 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

Filter Logoutput op niveau (log4j 1.x)

U kunt een filter gebruiken om alleen berichten te registreren die 'lager' zijn dan bijvoorbeeld ERROR niveau. Maar het filter wordt niet ondersteund door PropertyConfigurator. U moet dus overschakelen naar XML-configuratie om het te gebruiken . Zie log4j-Wiki over filters .

Voorbeeld "specifiek niveau"

<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> 

Of "Niveaubereik"

<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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow