Java Language
log4j / log4j2
Szukaj…
Wprowadzenie
Apache Log4j to narzędzie do rejestrowania oparte na Javie, jest to jedna z kilku platform rejestrowania Java. W tym temacie pokazano, jak skonfigurować i skonfigurować Log4j w Javie, wraz ze szczegółowymi przykładami wszystkich możliwych aspektów użytkowania.
Składnia
- Logger.debug („text to log”); // Rejestrowanie informacji debugowania
- Logger.info („tekst do dziennika”); // Logowanie wspólnych informacji
- Logger.error („text to log”); // Informacje o błędzie podczas rejestrowania
- Logger.warn („text to log”); // Rejestrowanie ostrzeżeń
- Logger.trace („text to log”); // Rejestrowanie informacji o śledzeniu
- Logger.fatal („text to log”); // Rejestrowanie błędów krytycznych
- Wykorzystanie Log4j2 z rejestrowaniem parametrów:
- Logger.debug („Parametry debugowania {} {} {}”, param1, param2, param3); // Debugowanie rejestrowania z parametrami
- Logger.info („Info params {} {} {}”, param1, param2, param3); // Rejestrowanie informacji z parametrami
- Logger.error („Parametry błędu {} {} {}”, param1, param2, param3); // Błąd logowania z parametrami
- Logger.warn („Warn params {} {} {}”, param1, param2, param3); // Rejestrowanie ostrzeżeń za pomocą parametrów
- Logger.trace („Trace params {} {} {}”, param1, param2, param3); // Rejestrowanie śledzenia z parametrami
- Logger.fatal („Fatal params {} {} {}”, param1, param2, param3); // Logowanie krytyczne z parametrami
- Logger.error („Caught Exception:”, ex); // Wyjątek rejestrowania za pomocą komunikatu i śledzenia stosu (zostanie automatycznie dołączony)
Uwagi
Osiągnięto koniec życia dla Log4j 1
5 sierpnia 2015 r. Komitet Zarządzający Projektem Usług Loggingowych ogłosił, że Log4j 1.x dobiegł końca. Pełny tekst ogłoszenia znajduje się na blogu Apache. Użytkownikom Log4j 1 zaleca się aktualizację do Apache Log4j 2 .
Jak zdobyć Log4j
Aktualna wersja (log4j2)
Korzystanie z Maven:
Dodaj następującą zależność do pliku 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>
Za pomocą 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>
Za pomocą 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'
}
Pobieranie log4j 1.x
Uwaga: Log4j 1.x osiągnął koniec okresu eksploatacji (EOL) (patrz Uwagi).
Korzystanie z Maven:
Zadeklaruj tę zależność w pliku POM.xml
:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Za pomocą Ivy:
<dependency org="log4j" name="log4j" rev="1.2.17"/>
Usign Gradle:
compile group: 'log4j', name: 'log4j', version: '1.2.17'
Za pomocą Buildr:
'log4j:log4j:jar:1.2.17'
Dodawanie ręczne w kompilacji ścieżki:
Pobierz z projektu strony Log4j
Jak korzystać z Log4j w kodzie Java
Najpierw należy utworzyć final static logger
obiekt final static logger
:
final static Logger logger = Logger.getLogger(classname.class);
Następnie metody rejestrowania połączeń:
//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);
Konfigurowanie pliku właściwości
Log4j daje możliwość jednoczesnego logowania danych do konsoli i plików. Utwórz plik log4j.properties
i umieść w tej podstawowej konfiguracji:
# 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
Jeśli używasz maven, umieść ten plik właściwości w ścieżce:
/ProjectFolder/src/java/resources
Podstawowy plik konfiguracyjny 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>
Jest to podstawowa konfiguracja log4j2.xml, która ma moduł dołączający konsolę i główny program rejestrujący. Układ wzorca określa, który wzorzec powinien być używany do rejestrowania instrukcji.
Aby debugować ładowanie pliku log4j2.xml, możesz dodać status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO>
atrybutu status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO>
w znaczniku konfiguracyjnym pliku log4j2.xml.
Możesz także dodać interwał monitorowania, aby ponownie ładował konfigurację po określonym okresie interwału. Interwał monitorowania można dodać do znacznika konfiguracji w następujący sposób: monitorInterval = 30
. Oznacza to, że konfiguracja będzie ładowana co 30 sekund.
Migracja z log4j 1.x do 2.x
Jeśli chcesz przeprowadzić migrację z istniejącego log4j 1.x w projekcie do log4j 2.x, usuń wszystkie istniejące zależności log4j 1.x i dodaj następującą zależność:
Log4j 1.x API Bridge
Kompilacja Maven
<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>
Stopniowa kompilacja
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-1.2-api', version: '2.6.2'
}
Most Apache Commons Logging Bridge Jeśli twój projekt korzysta z Apache Commons Logging, które używają log4j 1.x i chcesz przeprowadzić migrację do log4j 2.x, dodaj następujące zależności:
Kompilacja Maven
<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>
Stopniowa kompilacja
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-jcl', version: '2.6.2'
}
Uwaga: Nie usuwaj żadnych istniejących zależności wspólnego logowania Apache
Odniesienie: https://logging.apache.org/log4j/2.x/maven-artifacts.html
Plik właściwości do zalogowania do bazy danych
Aby ten przykład działał, potrzebujesz sterownika JDBC zgodnego z systemem, w którym działa baza danych. Oprogramowanie typu open source, które pozwala łączyć się z bazami danych DB2 w systemie IBM System i, można znaleźć tutaj: JT400
Mimo że ten przykład jest specyficzny dla DB2, działa on prawie dla każdego innego systemu, jeśli wymienisz sterownik i dostosujesz adres 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
Filtruj dane wyjściowe według poziomu (log4j 1.x)
Możesz użyć filtru, aby rejestrować tylko wiadomości „niższe” niż np. Poziom ERROR
. Ale filtr nie jest obsługiwany przez PropertyConfigurator. Musisz więc zmienić konfigurację na XML, aby z niej skorzystać . Zobacz log4j-Wiki o filtrach .
Przykład „określony poziom”
<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>
Lub „Zakres poziomów”
<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>