log4j - Registro no banco de dados
A API log4j fornece o org.apache.log4j.jdbc.JDBCAppender objeto, que pode colocar informações de registro em um banco de dados especificado.
Configuração JDBCAppender
Propriedade | Descrição |
---|---|
tamanho do buffer | Define o tamanho do buffer. O tamanho padrão é 1. |
motorista | Define a classe do driver para a string especificada. Se nenhuma classe de driver for especificada, o padrão ésun.jdbc.odbc.JdbcOdbcDriver. |
layout | Define o layout a ser usado. O layout padrão éorg.apache.log4j.PatternLayout. |
senha | Define a senha do banco de dados. |
sql | Especifica a instrução SQL a ser executada sempre que ocorre um evento de registro. Pode ser INSERT, UPDATE ou DELETE. |
URL | Define o URL JDBC. |
do utilizador | Define o nome de usuário do banco de dados. |
Configuração da Tabela de Log
Antes de começar a usar o log baseado em JDBC, você deve criar uma tabela para manter todas as informações de log. A seguir está a instrução SQL para criar a tabela 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
);
Arquivo de configuração de amostra
A seguir está um exemplo de arquivo de configuração log4j.properties para JDBCAppender que será usado para registrar mensagens em uma tabela 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
Para o banco de dados MySQL, você teria que usar o DBNAME real, ID do usuário e senha, onde você criou a tabela LOGS. A instrução SQL é para executar uma instrução INSERT com o nome da tabela LOGS e os valores a serem inseridos na tabela.
JDBCAppender não precisa que um layout seja definido explicitamente. Em vez disso, a instrução SQL passada para ele usa um PatternLayout.
Se você deseja ter um arquivo de configuração XML equivalente ao acima log4j.properties arquivo, então aqui está o conteúdo -
<?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>
Programa de amostra
A seguinte classe Java é um exemplo muito simples que inicializa e, em seguida, usa a biblioteca de registro Log4J para aplicativos 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");
}
}
Compilar e executar
Aqui estão as etapas para compilar e executar o programa mencionado acima. Certifique-se de ter definidoPATH e CLASSPATH apropriadamente antes de prosseguir para a compilação e execução.
Todas as bibliotecas devem estar disponíveis em CLASSPATHe seu arquivo log4j.properties deve estar disponível em PATH. Siga as etapas fornecidas -
- Crie log4j.properties conforme mostrado acima.
- Crie log4jExample.java conforme mostrado acima e compile-o.
- Execute log4jExample binário para executar o programa.
Agora verifique sua tabela LOGS dentro do banco de dados DBNAME e você encontrará as seguintes entradas -
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- Aqui, x é usado para gerar o Contexto de diagnóstico aninhado (NDC) associado ao encadeamento que gerou o evento de registro. Usamos NDC para distinguir clientes em componentes do lado do servidor que lidam com vários clientes. Verifique o Manual Log4J para obter mais informações sobre isso.