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.