Java Language
log4j / log4j2
Sök…
Introduktion
Apache Log4j är ett Java-baserat loggningsverktyg, det är ett av flera Java-loggningsramar. Detta ämne är att visa hur man konfigurerar och konfigurerar Log4j i Java med detaljerade exempel på alla möjliga användningsaspekter.
Syntax
- Logger.debug ("text att logga"); // Logga på felsökningsinfo
- Logger.info ("text att logga"); // Loggar vanlig info
- Logger.error ("text att logga"); // Loggningsfelinfo
- Logger.warn ("text att logga"); // Loggar varningar
- Logger.trace ("text att logga"); // Loggningsspårinfo
- Logger.fatal ("text att logga"); // Logga dödliga fel
- Log4j2-användning med parameterloggning:
- Logger.debug ("Debug params {} {} {}", param1, param2, param3); // Loggningsfelsökning med parametrar
- Logger.info ("Info params {} {} {}", param1, param2, param3); // Loggningsinfo med parametrar
- Logger.error ("Error params {} {} {}", param1, param2, param3); // Loggningsfel med parametrar
- Logger.warn ("Varna params {} {} {}", param1, param2, param3); // Loggar varningar med parametrar
- Logger.trace ("Spåra params {} {} {}", param1, param2, param3); // Loggningsspår med parametrar
- Logger.fatal ("Fatal params {} {} {}", param1, param2, param3); // Logga dödligt med parametrar
- Logger.error ("Fångat undantag:", ex); // Loggningsundantag med meddelande och stacktrace (läggs automatiskt till)
Anmärkningar
End of Life for Log4j 1 nådde
Den 5 augusti 2015 meddelade projektledningskommittén för Logging Services att Log4j 1.x hade nått slutet på livet. För fullständig text till tillkännagivandet se Apache-bloggen. Användare av Log4j 1 rekommenderas att uppgradera till Apache Log4j 2 .
Hur man hämtar Log4j
Aktuell version (log4j2)
Använda Maven:
Lägg till följande beroende till din POM.xml
fil:
<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>
Med 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>
Använda 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'
}
Skaffa log4j 1.x
Obs: Log4j 1.x har nått End-of-Life (EOL) (se Anmärkningar).
Använda Maven:
Förklara detta beroende i filen POM.xml
:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Med Ivy:
<dependency org="log4j" name="log4j" rev="1.2.17"/>
Användningsgrad:
compile group: 'log4j', name: 'log4j', version: '1.2.17'
Använda Buildr:
'log4j:log4j:jar:1.2.17'
Lägger till manuellt i sökvägen:
Ladda ner från Log4js webbplatsprojekt
Hur man använder Log4j i Java-kod
Först måste skapa ett final static logger
:
final static Logger logger = Logger.getLogger(classname.class);
Sedan, ring loggningsmetoder:
//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);
Ställer in fastighetsfil
Log4j ger dig möjlighet att logga in data i konsol och fil samtidigt. Skapa en log4j.properties
fil och lägg in den här grundläggande konfigurationen:
# 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
Om du använder maven sätter du den här filen i sökvägen:
/ProjectFolder/src/java/resources
Grundläggande konfigurationsfil 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>
Detta är en grundläggande log4j2.xml-konfiguration som har en konsoladapter och en root-logger. Mönsterlayouten anger vilket mönster som ska användas för att logga uttalandena.
För att felsöka inläsningen av log4j2.xml kan du lägga till attributstatusen status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO>
i konfigurationstaggen för din log4j2.xml.
Du kan också lägga till ett monitorintervall så att det laddar konfigurationen igen efter den angivna intervallperioden. Monitorintervallet kan läggas till i konfigurationstaggen på följande sätt: monitorInterval = 30
. Det betyder att konfigureringen laddas var 30: e sekund.
Migrerar från log4j 1.x till 2.x
Om du vill migrera från befintlig log4j 1.x i ditt projekt till log4j 2.x tar du bort alla befintliga log4j 1.x-beroenden och lägger till följande beroende:
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 Om ditt projekt använder Apache Commons Logging som använder log4j 1.x och du vill migrera det till log4j 2.x lägger du till följande beroenden:
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'
}
Obs! Ta inte bort några befintliga beroenden i Apache-kommandologgar
Referens: https://logging.apache.org/log4j/2.x/maven-artifacts.html
Egenskaper-fil för att logga in på DB
För att det här exemplet ska fungera behöver du en JDBC-drivrutin som är kompatibel med systemet som databasen körs på. En open source som låter dig ansluta till DB2-databaser på ett IBM System i kan du hitta här: JT400
Trots att detta exempel är DB2-specifikt fungerar det för nästan alla andra system om du byter drivrutin och anpassar JDBC-URL.
# 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
Filtrera utloggning efter nivå (log4j 1.x)
Du kan använda ett filter för att logga bara meddelanden "lägre" än t.ex. ERROR
nivå. Men filtret stöds inte av PropertyConfigurator. Så du måste ändra till XML-konfigurering för att använda den . Se log4j-Wiki om filter .
Exempel "specifik nivå"
<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>
Eller "Nivåområde"
<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>