Está en la página 1de 13

La Academia al servicio de la Vida

Base De Datos Log4j (Auditorias)

Presentado por: Leidy Tatiana Pinilla Villamizar Patricia Moreno Camargo

Universidad de Pamplona Base de Datos II Pamplona 2012

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

Introduccin Log4j es una biblioteca open source desarrollada en Java por la Apache Software Foundation que permite a los desarrolladores de software elegir la salida y el nivel de granularidad de los mensajes o logs (data logging) a tiempo de ejecucin y no a tiempo de compilacin como es comnmente realizado. La configuracin de salida y granularidad de los mensajes es realizada a tiempo de ejecucin mediante el uso de archivos de configuracin externos. Log4J ha sido implementado en otros lenguajes como: C, C++, C#,Perl, Python, Ruby y Eiffel.

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

Objetivos

Conocer la funcionalidad de los log4j. Aprender las caractersticas principales del funcionamiento de
Log4j y los trigger.

Implementar Log4j a mtodos y los trigger al auditar una tabla


en postgres.

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

Auditoria Tabla Postgres (Grado) Tomamos la tabla a auditar. create table programa.grado( gra_codigo varchar(10) not null, gra_nombre varchar(50) not null, niv_codigo integer not null, gra_requisito varchar(10), primary key(gra_codigo), unique(gra_nombre), ); Tendremos una tabla dedicada exclusivamente para el registro de las operaciones en nuestra base de datos. Los datos a guardar sern: Gra_usuario. Gra_fecha. Gra_hora. Gra_codigo_new Gra_nombre_new Niv_codigo Gra_requisito Gra_descripcion. Esta deber llevar los campos de la tabla a auditar(original), ya codificada ser as: CREATE TABLE programa.grado_auditoria( gra_usuario varchar(100), gra_fecha date, gra_hora time, gra_codigo_new varchar(10), gra_nombre_new varchar(50), niv_codigo_new int, gra_requisito_new varchar(10),
Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

gra_descripcion varchar(50) );

Ya tenemos nuestra tabla auditoria procedemos a crear los trigger necesarios para ir guardando la informacin.

Trigger insertar. CREATE OR REPLACE FUNCTION programa.auditar_grado()RETURNS trigger AS $$ begin insert into programa.grado_auditoria(gra_usuario,gra_fecha,gra_hora gra_codigo_new,gra_nombre_new,niv_codigo_new,gra_requisito_new, gra_descripcion)values(current_user,current_date,current_time, new.gra_codigo,new.gra_nombre,new.niv_codigo,new.gra_requisito,'in sercion'); return new; end; $$ LANGUAGE plpgsql;
CREATE TRIGGER insertar_grado_antes BEFORE INSERT ON programa.grado FOR EACH ROW EXECUTE PROCEDURE programa.insertar_grado_antes();

Trigger actualizar CREATE OR REPLACE FUNCTION programa.auditar_grado_actualizar() RETURNS trigger AS $$ begin insert into programa.grado_auditoria values(current_user,current_date, current_time,new.gra_codigo,new.gra_nombre,new.niv_codigo,new.gra _requisito,'actualizacion'); return new; end; $$ LANGUAGE plpgsql;

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

CREATE TRIGGER actualizar_grado_antes BEFORE UPDATE ON programa.grado FOR EACH ROW EXECUTE PROCEDURE programa.actualizar_grado_antes();

Trigger eliminar CREATE OR REPLACE FUNCTION programa.auditar_grado_eliminar() RETURNS trigger AS $$ begin insert into programa.grado_auditoria values(current_user,current_date, current_time,old.gra_codigo,old.gra_nombre,old.niv_codigo,old.gra_re quisito,'eliminacion'); return old; end; $$ LANGUAGE plpgsql;
CREATE TRIGGER eliminar_grado_antes BEFORE DELETE ON programa.grado FOR EACH ROW EXECUTE PROCEDURE programa.eliminar_grado_antes();

Campos: current_user - Usuario actual current_date - Fecha actual. current_time - Hora actual. New - Nuevo dato. Old - Dato Antiguo. Descripcin - insercin,actualizacin,eliminacin.
As tenemos nuestra auditoria hecha para una tabla en postgres SQL.

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

Auditoria con Log4j Descargamos el paquete de Log4j. Log4j tiene tres componentes principales para configurar: loggers, appenders y layouts; estos tres funcionan juntos para loggear de acuerdo al tipo de mensaje y formato. Cuando escribamos un mensaje para que vaya al log debemos especificar su nivel de prioridad. Por defecto Log4J tiene 6 niveles de prioridad para los mensajes (trace, debug, info, warn, error, fatal). Adems existen otros dos niveles extras (all y off). Niveles de prioridad (De mayor-poco detalle- a menor-mucho detalle-): FATAL: se utiliza para mensajes crticos del sistema, generalmente despus de guardar el mensaje el programa abortar. ERROR: se utiliza en mensajes de error de la aplicacin que se desea guardar, estos eventos afectan al programa pero lo dejan seguir funcionando, como por ejemplo que algn parmetro de configuracin no es correcto y se carga el parmetro por defecto. WARN: se utiliza para mensajes de alerta sobre eventos que se desea mantener constancia, pero que no afectan al correcto funcionamiento del programa. INFO: se utiliza para mensajes informativos sobre el avance de la aplicacin. Estimo que debe ser el ms utilizado de todos los niveles. DEBUG: se utiliza para escribir mensajes de depuracin. Este nivel no debe estar activado cuando la aplicacin se encuentre en produccin. TRACE: se utiliza para mostrar mensajes con un mayor nivel de detalle que debug. Extras: ALL: este es el nivel de mximo detalle, habilita todos los logs (en general equivale a TRACE). OFF: este es el nivel de mnimo detalle, deshabilita todos los logs. Por lo general, INFO y DEBUG son los utilizados.
Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

Appenders.

Layouts. Es el responsable de dar un formato de presentacin a los mensajes. El ms utilizado es PatternLayout ya que permite darnos la libertad de utilizar la creatividad para crear el formato de los mensajes. Para ello, debemos aprender algunos patrones: %m: muestra el mensaje. %p: muestra el nivel de prioridad. %r: muestra los milisegundos desde que comenz la aplicacin hasta el evento que se logue. %t: muestra el nombre del thread que loguel el evento.

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

%x: muestra el NDC del thread que loguel el evento. %n: deja un rengln, con lo cual nos olvidamos de "\n" o "\r\n". %c: categora del evento que figura en la configuracin. %%: muestra un signo de porcentaje. %d: muestra la fecha, que se le puede dar un formato determinado, por ejemplo %d{HH:mm:ss,SSS} o %d{dd MMM yyyy HH:mm:ss,SSS}.

Ejemplo: // Importar las clases de log4j. import org.apache.log4j.Logger; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.PropertyConfigurator; class prueba { // Define una variable esttica logger para que haga referencia a nuestra clase static Logger logger = Logger.getLogger (prueba.class); public static void main (String [] args) { //Establecer una configuracin sencilla que inicia sesin en la consola. PropertyConfigurator.configure("log4j.properties.txt"); logger.info ("Introduccin de la aplicacin."); prueba Bar = new prueba(); Bar.ejecuta(); logger.info ("Al salir de la aplicacin."); } void ejecuta(){ logger.error("Mostramos error");
Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

} } Log4j es totalmente configurable, ya que se realiza mediante un archivo llamado log4j.properties, como el siguiente: ### set log levels ### log4j.rootCategory=ALL, Default ### ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern =%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### ### log4j.appender.Default = org.apache.log4j.DailyRollingFileAppender log4j.appender.Default.layout = org.apache.log4j.PatternLayout log4j.appender.Default.File = /home/ubuntu/error.log log4j.appender.Default.Append = true log4j.appender.Default.Threshold = INFO log4j.appender.Default.layout = org.apache.log4j.PatternLayout log4j.appender.Default.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### ### log4j.appender.Default = org.apache.log4j.DailyRollingFileAppender log4j.appender.Default.layout = org.apache.log4j.PatternLayout log4j.appender.Default.File = /home/ubuntu/error.log log4j.appender.Default.Append = true log4j.appender.Default.Threshold = ERRORES log4j.appender.Default.layout = org.apache.log4j.PatternLayout log4j.appender.Default.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

Ya con estos conocimientos podemos implementar este api en nuestro proyecto. En mi caso lo implemente al controlador de grado. Primero importamos las libreras necesarias del paquete de Log4j. import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; Ubicamos el log4j.propieties, home/ubuntu/log4j.properties. en este caso est ubicado en

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

Ya implementado los Log4j, la modificacin del controlador de grado ser: package colegio.controlador; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; // Libreras importadas de Log4j import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import colegio.util.valueObject; import colegio.mediador.gradoMediador; import colegio.vo.gradoVO; public class gradoControlador{ static Logger logger = Logger.getLogger (gradoControlador.class); private gradoMediador mediador=null; private gradoVO ObjectVO=null; private HttpServletRequest request; private HttpServletResponse response; public String mensaje; public ArrayList list = null; private int limite = 10; private int grupo = 0; public gradoControlador(HttpServletRequest request, HttpServletResponse response){ PropertyConfigurator.configure("/home/ubuntu/log4j.properties");// localizacin del archive og4j.propieties // logger.error("se creo"); this.mediador = new gradoMediador(); this.ObjectVO = new gradoVO(); this.request = request; this.response = response; } public gradoVO getgradoVO(){ return ( ObjectVO == null ) ? new gradoVO() : ObjectVO; } public int getLimite(){ return this.limite; }

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

public int getGrupo(){ return this.grupo; } public void registrar(){ valueObject Parameter = new valueObject(); Parameter.setValueObject(request,ObjectVO); Parameter=null; this.mensaje = mediador.insertar(ObjectVO); logger.info(this.mensaje); } public void actualizar(){ valueObject Parameter = new valueObject(); Parameter.setValueObject(request,ObjectVO); Parameter=null; this.mensaje = mediador.actualizar(ObjectVO); logger.info(this.mensaje); } public void eliminar(){ //logger.info ("Introduccion eliminar"); valueObject Parameter = new valueObject(); Parameter.setValueObject(request,ObjectVO,new {"Gra_codigo"}); Parameter=null; this.mensaje = mediador.eliminar(ObjectVO); logger.info(this.mensaje); }

String[]

public void buscar(){ valueObject Parameter = new valueObject(); Parameter.setValueObject(request,ObjectVO,new String[] {"Gra_codigo"}); Parameter=null; this.list = (ArrayList)mediador.buscar(ObjectVO); } public void listarTodo(){ logger.error("Mostramos error listar"); logger.info ("Introduccion listartodo"); String aux =String.valueOf(request.getParameter("grupo")).trim(); String btn = String.valueOf(request.getParameter("boton")).trim(); if(aux.equals("null")||!btn.equals("null")) grupo=0; else this.grupo=Integer.valueOf(aux).intValue(); this.list = (ArrayList)mediador.listar(); }

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

La Academia al servicio de la Vida

public void listarGrupo(){ logger.error("Mostramos error listar grupo"); String aux = String.valueOf(request.getParameter("grupo")).trim(); String btn = String.valueOf(request.getParameter("boton")).trim(); if(aux.equals("null")||!btn.equals("null")) grupo=0; else this.grupo=Integer.valueOf(aux).intValue(); this.list = (ArrayList)mediador.listar(limite,grupo); } public void requisito(){ valueObject Parameter = new valueObject(); Parameter.setValueObject(request,ObjectVO,new String[] {"Gra_codigo"}); Parameter=null; this.list = (ArrayList)mediador.requisito(ObjectVO); } } logger.info(this.mensaje); presentan. // nos muestra la accin y errores que Conclusiones

Comprobamos que usando la jerarqua de los loggers se pueden controlar granularmente que mensajes deseamos mostrar. Con log4j mejoramos el rendimiento y el seguimiento de errores de las aplicaciones como lo hicimos en este proyecto a la tabla grado. Un disparador o trigger es una funcin con ciertas caractersticas, de ellas la ms relevante es que es invocada (llamada) automticamente al suceder cierto evento sobre una tabla como insertar un registro, borrar, actualizar, editar, etc. En un trigger tambin podemos definir en qu momento se ejecute el trigger: antes o despus de cualquier evento (insertar, actualizar, eliminar).

Universidad de Pamplona - Ciudad Universitaria - Pamplona (Norte de Santander - Colombia) Tels: (7) 5685303 - 5685304 - 5685305 Fax: 5682750 www.unipamplona.edu.co

También podría gustarte