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.