log4j - Logowanie do bazy danych

Interfejs API log4j udostępnia org.apache.log4j.jdbc.JDBCAppender obiekt, który może umieścić informacje logowania w określonej bazie danych.

Konfiguracja JDBCAppender

własność Opis
Rozmiar bufora Ustawia rozmiar bufora. Domyślny rozmiar to 1.
kierowca Ustawia klasę sterownika na określony ciąg. Jeśli nie określono żadnej klasy sterownika, wartością domyślną jestsun.jdbc.odbc.JdbcOdbcDriver.
układ Ustawia używany układ. Domyślny układ toorg.apache.log4j.PatternLayout.
hasło Ustawia hasło bazy danych.
sql Określa instrukcję SQL, która ma być wykonywana za każdym razem, gdy wystąpi zdarzenie rejestrowania. Może to być INSERT, UPDATE lub DELETE.
URL Ustawia adres URL JDBC.
użytkownik Ustawia nazwę użytkownika bazy danych.

Konfiguracja tabeli dziennika

Przed rozpoczęciem korzystania z rejestrowania opartego na JDBC należy utworzyć tabelę, aby zachować wszystkie informacje dziennika. Poniżej znajduje się instrukcja SQL do tworzenia tabeli LOGS -

CREATE TABLE LOGS
   (USER_ID VARCHAR(20)    NOT NULL,
    DATED   DATE           NOT NULL,
    LOGGER  VARCHAR(50)    NOT NULL,
    LEVEL   VARCHAR(10)    NOT NULL,
    MESSAGE VARCHAR(1000)  NOT NULL
   );

Przykładowy plik konfiguracyjny

Poniżej znajduje się przykładowy plik konfiguracyjny log4j.properties dla JDBCAppender, który będzie używany do rejestrowania komunikatów w tabeli LOGS.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, DB

# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME

# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver

# Set database user name and password
log4j.appender.DB.user=user_name
log4j.appender.DB.password=password

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

W przypadku bazy danych MySQL musiałbyś użyć rzeczywistej nazwy DBNAME, identyfikatora użytkownika i hasła, w którym utworzyłeś tabelę LOGS. Instrukcja SQL ma na celu wykonanie instrukcji INSERT z nazwą tabeli LOGS i wartościami, które mają być wprowadzone do tabeli.

JDBCAppender nie wymaga jawnego definiowania układu. Zamiast tego instrukcja SQL przekazana do niej używa PatternLayout.

Jeśli chcesz mieć plik konfiguracyjny XML odpowiadający powyższemu log4j.properties plik, to tutaj jest zawartość -

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
   <param name="url" value="jdbc:mysql://localhost/DBNAME"/>
   <param name="driver" value="com.mysql.jdbc.Driver"/>
   <param name="user" value="user_id"/>
   <param name="password" value="password"/>
   <param name="sql" value="INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')"/>
   
   <layout class="org.apache.log4j.PatternLayout">
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="DB"/>
</logger>

</log4j:configuration>

Przykładowy program

Poniższa klasa Java jest bardzo prostym przykładem, który inicjuje, a następnie używa biblioteki rejestrowania Log4J dla aplikacji Java.

import org.apache.log4j.Logger;
import java.sql.*;
import java.io.*;
import java.util.*;

public class log4jExample{
   /* Get actual class name to be printed on */
   static Logger log = Logger.getLogger(log4jExample.class.getName());
   
   public static void main(String[] args)throws IOException,SQLException{
      log.debug("Debug");
      log.info("Info");
   }
}

Skompiluj i wykonaj

Oto kroki, aby skompilować i uruchomić wyżej wymieniony program. Upewnij się, że masz ustawionePATH i CLASSPATH odpowiednio przed przystąpieniem do kompilacji i wykonania.

Wszystkie biblioteki powinny być dostępne w CLASSPATHa plik log4j.properties powinien być dostępny w PATH. Postępuj zgodnie z podanymi krokami -

  • Utwórz plik log4j.properties, jak pokazano powyżej.
  • Utwórz plik log4jExample.java, jak pokazano powyżej, i skompiluj go.
  • Uruchom plik binarny log4jExample, aby uruchomić program.

Teraz sprawdź swoją tabelę LOGS w bazie danych DBNAME, a znajdziesz następujące wpisy -

mysql >  select * from LOGS;
+---------+------------+--------------+-------+---------+
| USER_ID | DATED      | LOGGER       | LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
|         | 2010-05-13 | log4jExample | DEBUG | Debug   |
|         | 2010-05-13 | log4jExample | INFO  | Info    |
+---------+------------+--------------+-------+---------+
2 rows in set (0.00 sec)

Note- Tutaj x służy do wyprowadzania zagnieżdżonego kontekstu diagnostycznego (NDC) skojarzonego z wątkiem, który wygenerował zdarzenie rejestrowania. Używamy NDC do rozróżniania klientów w komponentach po stronie serwera obsługujących wielu klientów. Sprawdź podręcznik Log4J, aby uzyskać więcej informacji na ten temat.