¿Cómo cambiar el nivel de log en tiempo de ejecución?

0
19693

Log4J: ¿Cómo cambiar el nivel de log en tiempo de ejecución?

Una tarea fundamental en todo proyecto informático es la generación de log o trazas, generalmente para detectar y solucionar los posibles errores
que pudieran producirse.

Debido a que no todos las aplicaciones pueden pararse para cambiar el nivel de log, es preciso tener un mecanismo para modificar el comportamiento de las trazas en tiempo de ejecución.

A continuación vamos a ver un ejemplo de como poder modificar la configuración de Log4j en caliente (sin parar la aplicación)

El ejemplo

package com.autentia.log4j;

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

/**
 * Sencilla aplicación de consola
 * @author Carlos García. Autentia.
 * @see http://www.mobiletest.es
 */
public class Log4JRuntimeLevelChanged {

	public static void main(String[] args) {
		try {
			// Inicializamos el sistema de log monitorizando cada 20 segundos
			// los cambios (o la creación) del archivo de configuración "logging.xml".
			DOMConfigurator.configureAndWatch("logging.xml", 20*1000);
			
			Logger logger = Logger.getLogger(Log4JRuntimeLevelChanged.class);
			for (int i = 0; i < 100; i++){
				// Ahora sacamos par de trazas
				logger.debug("Debug: " + i);
				logger.error("Error: " + i);
				
				// Nos dormimos un par de segundos
				Thread.sleep(2000);
			}
		} catch (java.lang.InterruptedException ex){
			// No hacemos nada
		} catch (Exception ex){
			System.out.println(ex);
		} finally {
			System.out.println("Fin");
		}
	}
}

Archivo de configuración de Log4j: logging.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

	
		
			
		
	

	
    	
    	
    	
    	
		
			
		
	

	
		
		
		
		

Si ejecutamos la aplicación y cambiamos el nivel de log de error a debug podrímos obtener una salida como la que se muestra a continuación, en donde podemos ver como las primeras salidas están a nivel de ERROR pero luego comienzan a sacarse también trazas de DEBUG.

test_archive.log

2008-07-17 17:32:03 [ERROR] [com.autentia.log4j.Log4JRuntimeLevelChanged.main(Log4JRuntimeLevelChanged.java:23)] 
Error: 0

2008-07-17 17:32:05 [ERROR] [com.autentia.log4j.Log4JRuntimeLevelChanged.main(Log4JRuntimeLevelChanged.java:23)] 
Error: 1

2008-07-17 17:32:07 [ERROR] [com.autentia.log4j.Log4JRuntimeLevelChanged.main(Log4JRuntimeLevelChanged.java:23)] 
Error: 2

2008-07-17 17:32:09 [DEBUG] [com.autentia.log4j.Log4JRuntimeLevelChanged.main(Log4JRuntimeLevelChanged.java:22)] 
Debug: 3

2008-07-17 17:32:09 [ERROR] [com.autentia.log4j.Log4JRuntimeLevelChanged.main(Log4JRuntimeLevelChanged.java:23)] 
Error: 3

2008-07-17 17:32:11 [DEBUG] [com.autentia.log4j.Log4JRuntimeLevelChanged.main(Log4JRuntimeLevelChanged.java:22)] 
Debug: 4

2008-07-17 17:32:11 [ERROR] [com.autentia.log4j.Log4JRuntimeLevelChanged.main(Log4JRuntimeLevelChanged.java:23)] 
Error: 4

Otros tutoriales relaccionados

Conclusiones

La gestión de trazas es una parte fundamental de toda aplicación, por lo que es recomendable establecer alguna política o pautas al respecto dentro del proyecto.

Recordar que la mayor parte del dinero de un sistema informático se va en mantenimientos, así que un buen sistema de logs nos hará la vida más fácil y nos permitirá ahorrar muchos esfuerzos (dinerito).

Un saludo, Carlos García, creador de Mobiletest.

Autentia Real Business Solutions.


A continuación puedes evaluarlo:

Regístrate para evaluarlo









Por favor, vota +1 o compártelo si te pareció interesante

Share
|







Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Fecha publicación: 2008-07-17-09:25:27

Autor:

[Carlos] Seguramente hicieras algo mal o era un bug de la maquina virtual.. pruébalo ahora de nuevo...

Fecha publicación: 2008-07-17-08:55:24

Autor:

[david] Yo probé el configureAndWatch hace muchos años y me colgó la máquina. Creaba un thread cada vez que recargaba el fichero. Mi duda es si yo estaba haciendo algo mal o no. De todas formas el javadoc dice:
Read the configuration file configFilename if it exists. Moreover, a thread will be created that will periodically check if configFilename has been created or modified. The period is determined by the delay argument. If a change or file creation is detected, then configFilename is read to configure log4j.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

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

Por favor ingrese su nombre aquí

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

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad