log4j - Accesso al database

L'API log4j fornisce l'estensione org.apache.log4j.jdbc.JDBCAppender oggetto, che può inserire le informazioni di registrazione in un database specificato.

Configurazione JDBCAppender

Proprietà Descrizione
dimensione buffer Imposta la dimensione del buffer. La dimensione predefinita è 1.
conducente Imposta la classe del driver sulla stringa specificata. Se non viene specificata alcuna classe di driver, il valore predefinito èsun.jdbc.odbc.JdbcOdbcDriver.
disposizione Imposta il layout da utilizzare. Il layout predefinito èorg.apache.log4j.PatternLayout.
parola d'ordine Imposta la password del database.
sql Specifica l'istruzione SQL da eseguire ogni volta che si verifica un evento di registrazione. Potrebbe essere INSERT, UPDATE o DELETE.
URL Imposta l'URL JDBC.
utente Imposta il nome utente del database.

Configurazione della tabella di registro

Prima di iniziare a utilizzare la registrazione basata su JDBC, è necessario creare una tabella per conservare tutte le informazioni di registro. Di seguito è riportata l'istruzione SQL per la creazione della tabella 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
   );

File di configurazione di esempio

Di seguito è riportato un file di configurazione di esempio log4j.properties per JDBCAppender che verrà utilizzato per registrare i messaggi in una tabella 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

Per il database MySQL, dovresti utilizzare l'effettivo DBNAME, ID utente e password, dove hai creato la tabella LOGS. L'istruzione SQL deve eseguire un'istruzione INSERT con il nome della tabella LOGS ei valori da inserire nella tabella.

JDBCAppender non necessita di un layout da definire in modo esplicito. Invece, l'istruzione SQL passata utilizza un PatternLayout.

Se desideri avere un file di configurazione XML equivalente a quanto sopra log4j.properties file, quindi ecco il contenuto -

<?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>

Programma di esempio

La seguente classe Java è un esempio molto semplice che inizializza e quindi utilizza la libreria di registrazione Log4J per le applicazioni 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");
   }
}

Compila ed esegui

Ecco i passaggi per compilare ed eseguire il programma sopra menzionato. Assicurati di aver impostatoPATH e CLASSPATH opportunamente prima di procedere alla compilazione e all'esecuzione.

Tutte le librerie dovrebbero essere disponibili in CLASSPATHe il file log4j.properties dovrebbe essere disponibile in PATH. Segui i passaggi indicati -

  • Crea log4j.properties come mostrato sopra.
  • Crea log4jExample.java come mostrato sopra e compilarlo.
  • Eseguire log4jExample binary per eseguire il programma.

Ora controlla la tua tabella LOGS all'interno del database DBNAME e troverai le seguenti voci:

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- Qui x viene utilizzato per generare il contesto diagnostico annidato (NDC) associato al thread che ha generato l'evento di registrazione. Utilizziamo NDC per distinguere i client in componenti lato server che gestiscono più client. Controllare il manuale di Log4J per ulteriori informazioni su questo.