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.