log4j - Iniciar sesión en la base de datos

La API de log4j proporciona org.apache.log4j.jdbc.JDBCAppender objeto, que puede poner información de registro en una base de datos específica.

Configuración de JDBCAppender

Propiedad Descripción
tamaño del búfer Establece el tamaño del búfer. El tamaño predeterminado es 1.
conductor Establece la clase de controlador en la cadena especificada. Si no se especifica ninguna clase de controlador, el valor predeterminado essun.jdbc.odbc.JdbcOdbcDriver.
diseño Establece el diseño que se utilizará. El diseño predeterminado esorg.apache.log4j.PatternLayout.
contraseña Establece la contraseña de la base de datos.
sql Especifica la instrucción SQL que se ejecutará cada vez que se produzca un evento de registro. Esto podría ser INSERT, UPDATE o DELETE.
URL Establece la URL de JDBC.
usuario Establece el nombre de usuario de la base de datos.

Configuración de la tabla de registro

Antes de comenzar a utilizar el registro basado en JDBC, debe crear una tabla para mantener toda la información del registro. A continuación se muestra la instrucción SQL para crear la tabla 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
   );

Archivo de configuración de muestra

A continuación se muestra un archivo de configuración de muestra log4j.properties para JDBCAppender que se utilizará para registrar mensajes en una tabla de 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 la base de datos MySQL, tendría que usar el DBNAME, el ID de usuario y la contraseña reales, donde ha creado la tabla de LOGS. La instrucción SQL es ejecutar una instrucción INSERT con el nombre de tabla LOGS y los valores que se ingresarán en la tabla.

JDBCAppender no necesita que se defina explícitamente un diseño. En su lugar, la instrucción SQL que se le pasa utiliza un PatternLayout.

Si desea tener un archivo de configuración XML equivalente al anterior log4j.properties archivo, aquí está el contenido:

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

La siguiente clase de Java es un ejemplo muy simple que se inicializa y luego usa la biblioteca de registro Log4J para aplicaciones 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 y ejecutar

Estos son los pasos para compilar y ejecutar el programa mencionado anteriormente. Asegúrate de haber configuradoPATH y CLASSPATH apropiadamente antes de proceder a la compilación y ejecución.

Todas las bibliotecas deben estar disponibles en CLASSPATHy su archivo log4j.properties debería estar disponible en PATH. Siga los pasos dados -

  • Cree log4j.properties como se muestra arriba.
  • Cree log4jExample.java como se muestra arriba y compílelo.
  • Ejecute log4jExample binary para ejecutar el programa.

Ahora verifique su tabla de LOGS dentro de la base de datos DBNAME y encontrará las siguientes 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- Aquí x se utiliza para generar el contexto de diagnóstico anidado (NDC) asociado con el hilo que generó el evento de registro. Usamos NDC para distinguir clientes en componentes del lado del servidor que manejan múltiples clientes. Consulte el manual de Log4J para obtener más información al respecto.