Log4J: Cómo crear un log que trabaje hacia una Base de Datos.

Este tutorial pretende ser un ejemplo sencillo de como podemos dirigir el log4j de apache hacia un MySql. Dejaremos en una Base de Datos , trazas de la ejecución de una aplicación Web.

Log4J: Cómo crear un log que trabaje hacia una Base de Datos.

Como utilizar JDBCAppender con MySql

Este tutorial pretende ser un ejemplo sencillo de como podemos dirigir el log4j de apache hacia un MySql. Dejaremos en una Base de Datos , trazas de la ejecución de una aplicación Web. Me pasé un día intentando encontrar un ejemplo sencillo. He pensado que podría ser util añadir uno como este.

Tiene el minimo número de elementos que lo hacian funcionar pero también se ha pretendido que no fuera un puro engendro. Es una simplisima aplicación Web

Haremos dos cosas. crearemos el projecto Java, nuestra aplicación y por otro lado haremos el Esquema y la tabla en un MySql.

Se da por supuesto que tenemos un servidor MySql instalado y corriendo. Tambíén hemos de tener un Apache-tomcat instalado que pueda servir nuestra futura aplicación.,aunque no es necesario que esté corriendo. Tomcat será el contenedor Web de nuestro Servlet(index.jsp).

Los objetos a construir son los siguientes:(con Eclipse las lineas a tirar, no llegan a veinte)

  1. Text
    Crear una aplicacion Java WEB ,Dynamic Web Project.

  2. Text
     Una clase "Entidad.java" con dos log (6 lineas)

    :

  3. Text
    Un jsp "index.jsp", que utilice la Entidad (3 lineas)

    :

    Text
     
  4. Text
    Un listener "Escuchador.java" , que llame al DOMConfigurator que cargará la configuracion de log4j (1 linea)

    :

  5. Text
    Crear un archivo xml "log4jConfig.xml", que contenga la configuración del log4j (11 lineas)

    :

  6. Text
    Dentro de lib las librerias de log4j-1.2.15.jar y  mysql-connector-java-5.1.6-bin.jar

    :

  7. Text
    Crear un Schema en MySql y una tabla para los logs. Trabajamos con el QueryBrowser de MySql

    :

  • 1 – Crear una aplicacion Dynamic Web Project:
  • Text
    Crearemos una aplicación que se llame "ApacheLog4jMysql". Un paquete es.mad.tutorial

  • 2 – Creamos en es.mad.tutorial una clase «Entidad» con dos loggeos
  • Text
    para poder hacer siguiente el import debemos tener la librería log4j-1.2.15.jar en "WebContent/WEB-INF/lib".

    	import org.apache.log4j.Logger;
    
    	public class Entidad {
    		
    		//Crea un objeto Logger al cargar la clase.
    		private static Logger log = Logger.getLogger(Entidad.class);
    
    		public Entidad() throws Exception{		
    			log.info("un mensaje desde el constructor" );	
    		}	
    		public void ejecutar(){
    			int i = 6;
    			log.info("un mensaje desde ejecutar  "+i);
    		}
    	}
    
    

  • 3 – Creamos en WebContent la vista que utilice la Entidad. La llamaremos «index.jsp» :
  • Text
    La vista ademas tendrá un link que la redirigirá hacia ella misma

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	    pageEncoding="ISO-8859-1"%>
	<%@page import="es.mad.tutorial.*" %>
	
	
	
	
	
	
	<%	Entidad instanciaEntidad = new Entidad();
				instanciaEntidad.ejecutar(); %>
	
  • RECARGAR PAGINA
  • 4 – Creamos en es.mad.tutorial un Listener que llamaremos «Escuchador»
  • Text
    En la linea DOMConfigurator cargamos el archivo de configuraci&#243;n log4jConfig.xml

    package es.mad.tutorial;
    
    	import javax.servlet.ServletContextEvent;
    	import javax.servlet.ServletContextListener;
    
    	import org.apache.log4j.xml.DOMConfigurator;
    
    	public class Escuchador implements ServletContextListener {
    	
    	    public void contextInitialized(ServletContextEvent arg0) {
    			DOMConfigurator.configure(Escuchador.class.getClassLoader().getResource("/es/mad/tutorial/log4jConfig.xml"));  
    	    }	
    	    public void contextDestroyed(ServletContextEvent arg0) {
    	    }
    
    	}
    
    

  • 5 – Crearemos en es.mad.tutorial un xml, «log4fConfig.xml» que tiene la configuraciono para log4j>
  • Text
    Esto merece una cierto detenimiento. El param name="driver" tiene como valor el protocolo de comunicaci&#243;n con la BBDD. En nuestro caso MySql.

    Text
    El param URL nos indica la direccion de la BBDD y del esquema. El user el usuario (root) y la password la contrase&#195;&#177;a de MySql. En nuestro caso ninguna.

    Text
    El param sql  tiene por valor una  oracion MySql que ser&#195;&#161; ejecutada para cada log. Nuestra consulta inserta en el Schema:Log en la tabla:ApacheLog4jMysql  sobre los campos:Fecha,Clase,Prioridad y Mensaje los valores: fecha ( %n%d{yyyy-MM-dd HH:mm:ss} ), clase ( %c ), prioridad ( %p ) y mensaje ( %m ) que todo log contiene

    Text
    Recuerdese que nosotros solo les introdujimos mensaje. La clase, fecha y demas son parametros que podemos pedirles.

    Text
    En root indicamos dos cosas: el nivel de error que queremos que se registre. Segun sean info,debug,war,error o fatal el nivel minimo deseado.

    Text
    Por otra parte el appender nos indica con que tipo de log4j estamos actualmente trabajando. Siempre podemos a&#195;&#177;adir otros appenders que generen archivos,o conexiones. Nosotros nos conectaremos a una Base de Datos. Por eso JDBCAppender. Si quieres ver otros appenders <a href="http://www.javaworld.com/javaforums/showflat.php?Number=2396">pincha aqui</a>

    
    		
    
    		 		
    				 
    				 
    				 
    				 
    				 			
    		
    
    		
    					
    	  		
    			
    	
    
    
    
    

  • 6 – No se nos olvide descargar las librerias de log4j-1.2.15.jar y mysql-connector-java-5.1.6-bin.jar. Hay que gurdarlas en nuestra aplicación. En «ApacheLog4jMysql/WebContent/WEB-INF/lib»>
  • La aplicación esta lista.

  • 7 – Ahora nos ponemos con MySql. En funcion de lo que hemos puesto en el «log4fConfig.xml»
  • Text
    ******  INSERT INTO <b>Log.ApacheLog4jMysql</b> (Fecha,Clase,Prioridad,Mensaje) VALUES ( '%n%d{yyyy-MM-dd HH:mm:ss}','%c','%p','%m ')" ******

    Creamos un Schema que se llame «Log» y dentro haremos una tabla «ApacheLog4jMysql» con los campos:

    Text
    <p>*******INSERT INTO Log.ApacheLog4jMysql (<b>Fecha,Clase,Prioridad,Mensaje</b>) VALUES ( '%n%d{yyyy-MM-dd HH:mm:ss}','%c','%p','%m ')"******</p>

    Con los tipos DateTime el primero, y Varchar(55) el resto,

    Accion

    Tras todo esto nos aseguramos que el servidor MySql siga arrancado. Arrancamos nuestra aplicación en el servidor Tomcat (si trabajamos con eclipse el lo hara comodamente por nosotros)

    En ese momento la aplicación ApacheLog4jMysql se carga. El listener «Escuchador» se inicializa y cargará el DOMConfigurator. Este obtendrá la configuración del archivo que se le pase. En nuestro caso, log4jConfig.xml.(Cuando nuestro archivo de configuración sea del tipo clave valor ,y no un xml, trabajaremos con el PropertiesConfigurator en vez del DOM.)

    	public void contextInitialized(ServletContextEvent arg0) {
    		DOMConfigurator.configure(Escuchador.class.getClassLoader().getResource("/es/mad/tutorial/log4jConfig.xml"));  
        }
    
    

    Los logs están esperando que alguien los llame. Carguemos en el navegador «localhost:8080/ApacheLog4jMysql». Hemos de ver el enlace «RECARGAR PAGINA».La pagina ya se ha cargado. Pero si pinchamos sobre el enlace la vista index.jsp se recargará otra vez, ya qué elenlace apunta hacia sí mismo:

    RECARGAR PAGINA
    

    Cada vez que lo haga creará un objeto de la clase «Entidad» y le pasará un método. Estos crearán los logs.

    <%	Entidad instanciaEntidad = new Entidad();
    						instanciaEntidad.ejecutar(); %>
    			
    

    public Entidad() throws Exception{		
    								log.info("un mensaje desde el constructor" );		
    
    							}
    			
    

    public void ejecutar(){
    								int i = 6;
    								log.info("un mensaje desde ejecutar  "+i);
    							}
    

    listo!

    Los logs se activan y van a parar a la Base de Datos que le hemos indicado. En mi caso yo tengo un campo id en la tabla. Manias.

    Id Fecha Clase Prioridad Mensaje
    110 2008-12-27 20:26:42 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    111 2008-12-27 20:26:42 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    112 2008-12-27 20:26:43 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    113 2008-12-27 20:26:43 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    114 2008-12-27 20:26:44 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    115 2008-12-27 20:26:44 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    116 2008-12-27 20:26:44 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    117 2008-12-27 20:26:44 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    118 2008-12-27 20:26:44 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    119 2008-12-27 20:26:44 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    120 2008-12-27 20:46:01 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    121 2008-12-27 20:46:01 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    122 2008-12-27 20:46:02 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    123 2008-12-27 20:46:02 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    124 2008-12-27 20:46:02 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    125 2008-12-27 20:46:02 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    126 2008-12-27 20:46:02 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    127 2008-12-27 20:46:02 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    128 2008-12-27 20:46:02 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    129 2008-12-27 20:46:02 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6
    130 2008-12-27 20:48:17 es.mad.tutorial.Entidad INFO un mensaje desde el constructor
    131 2008-12-27 20:48:17 es.mad.tutorial.Entidad INFO un mensaje desde ejecutar 6

    Espero que la sencillez del ejemplo sirva para ver mejor como trabaja log4j de Apache.

    Un saludo.

    Francisco López-Sancho Abraham

    Comentarios

    Un comentario

    1. Francisco, e implementado el codigo pero no me sirvio, podrias dejar un link de descarga del codigo, y no se como va la estructura de Entidad,Escuchar y el archivo xml..

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    He leído y acepto la política de privacidad

    Información básica acerca de la protección de datos

    • Responsable: IZERTIS S.A.
    • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
    • Legitimación: Consentimiento del interesado
    • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
    • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
    • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

    Desarrollador de proyectos informáticos

    ¿Quieres publicar en Adictos al trabajo?

    Te puede interesar

    Aprende cómo migrar tu sitio Joomla 3 a Joomla 5 de forma segura, manteniendo el diseño, la funcionalidad y compatibilidad con extensiones. Una guía paso a paso con recomendaciones, imágenes y buenas prácticas para actualizar sin sorpresas.
    Descubre qué es Yocto Project, sus ventajas, usos reales en Izertis y cómo crear tu propia distribución Linux para Raspberry Pi paso a paso, de forma sencilla y flexible.
    ¿Trabajas con Drupal y SonarQube 9.9? En este artículo exploramos cómo adaptar el análisis estático para evitar falsos positivos, desactivar reglas conflictivas del Quality Profile y delegar el estilo a PHP CodeSniffer. Una guía práctica para mejorar la integración sin depender aún de SonarQube 10.