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 .

Od: http://logging.apache.org/log4j/1.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>


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow