Iniciar sesión

Configuración básica de log4j2

Rodrigo

Traducido por Rodrigo

Creado 2014-09-17 23:45:40 Modificado 2014-09-18 00:12:21

Apache log4j2 es una mejora de log4j la cual es una librería que te permite lanzar logs en diferentes salidas, la mayoría de la salida de los logs es un texto plano junto a al log de consola.

En este tutorial vamos a usar esta librería para lanzar algunos logs

este tutorial fue escrito usando el siguiente equipo:

  • Hardware:           laptop Thinkpad E430 Intel I5, 4gb Ram, 500gb HDD
  • OS:                    x86_64 GNU/Linux Ubuntu 14.10
  • Kernel:               3.13.0-35-generic
  • IDE/Text editor:   Eclipse Java EE IDE for Web Developers Version: Kepler Service Release 2
  • JDK:                   Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
  • log4j:                  apache-log4j-2.0.1

 

1.- Configurando el ambiente:

Primero necesitamos descargar la librería para poder añadirla a nuestro proyecto y usarla para lanzar algunos logs, vamos a http://logging.apache.org/log4j/2.x/download.htm y descargamos la última versión

2.- Creando el proyecto log4j2example:

Una vez descargada la librería, vamos a crear nuestro proyecto que se llamará log4j2example, vamos a eclipse file => new => java project y haz click en next

ahora pongamos el nombre del proyecto "log4j2example" y hacemos click en ok

3.- Añadiendo la librería:

Ahora tenemos que añadir la librería descargada a nuestro proyecto, entonces primero crearemos la carpeta "lib" dentro del proyecto, en la raíz, vamos a file => new => folder y creamos la carpeta "lib"

una vez que la carpeta este creada, copiamos las siguientes librerías dentro de la carpeta lib:

  • log4j-api-2.0.1.jar
  • log4j-core-2.0.1.jar

ahora hacemos click derecho en el proyecto build path => configure build path => java build path => add jars, y seleccionamos los 2 jars que copiamos anteriormente y damos click en ok

 

 

4.- Creando la clase main:

Hemos configurado todo, ahora necesitamos crear la clase main para poder probar los logs de nuestra aplicación, vamos a file => new => class y creamos la clase Logexample dentro del package "com.rrivero.log"

 

luego creamos el método main y añadimos algunas salidas de logs usando la librería

package com.rrivero.log;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class Logexample {
	
	private static final Logger log = LogManager.getLogger(Logexample.class.getName());

	public static void main(String[] args) {
		
		log.trace("trace message");
		log.debug("debug message");
		log.warn("warn message");
		log.info("info message");
		log.error("error message");
		log.fatal("fatal message");

	}

}

ahora necesitamos la configuración de log4j, entonces vamos a crear el archivo  "log4j2.xml"  en la raíz de la carpeta src:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
	<Properties>
		<Property name="log-path">/home/rodrigo/logs</Property>
	</Properties>

	<Appenders>
		<RollingFile name="file-log" fileName="${log-path}/HelloLog4j2.log" filePattern="${log-path}/HelloLog4j-%d{yyyy-MM-dd}.log">
			<PatternLayout pattern="[%5p] - %c{1}:%L %d{yyyy-MM-dd HH:mm:ss} - %m%n"/>
			<Policies>
				<TimeBasedTriggeringPolicy interval="1"	modulate="true" />
			</Policies>
		</RollingFile>

		<Console name="console" target="SYSTEM_OUT">
			<PatternLayout pattern="[%5p] - %c{1}:%L %d{yyyy-MM-dd HH:mm:ss} - %m%n" />
		</Console>
	</Appenders>
	<Loggers>
	
		<!-- here we restrict the log level by package 
		<Logger name="com.rrivero.log" level="info" additivity="true">
			<appender-ref ref="file-log" level="fatal" />
		</Logger>
		-->
		
		<Root level="debug">
			<appender-ref ref="console" />
			<appender-ref ref="file-log" />
		</Root>
	</Loggers>
</Configuration>

una vez añadidas las librerías, creada la configuración y creada la clase main, deberíamos tener la siguiente estructura del proyecto:

 

y el siguiente .classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
	<classpathentry kind="lib" path="lib/log4j-api-2.0.1.jar"/>
	<classpathentry kind="lib" path="lib/log4j-core-2.0.1.jar"/>
	<classpathentry kind="output" path="bin"/>
</classpath>

5.- Probando las salidas:

Hasta aquí hemos terminado, configura tu ruta y el nombre del archivo para la salida del log en el archivo de configuración:

<Property name="log-path">/home/rodrigo/logs</Property>

 

<RollingFile name="file-log" fileName="${log-path}/HelloLog4j2.log" filePattern="${log-path}/HelloLog4j-%d{yyyy-MM-dd}.log">

y ejecuta la clase main, si las cosas van bien, tendremos nuestra salida en la carpeta que especificamos en el archivo de configuración:

 

y tendremos la siguiente salida:

[DEBUG] - Logexample:14 2014-09-17 17:02:09 - debug message
[ WARN] - Logexample:15 2014-09-17 17:02:09 - warn message
[ INFO] - Logexample:16 2014-09-17 17:02:09 - info message
[ERROR] - Logexample:17 2014-09-17 17:02:09 - error message
[FATAL] - Logexample:18 2014-09-17 17:02:09 - fatal message

date cuenta que no tenemos ningún log trace, porque así lo definimos en el archivo de connfiguración, para las 2 salidas:

<Root level="debug">
			<appender-ref ref="console" />
			<appender-ref ref="file-log" />
		</Root></pre>

entonces si queremos tener la salida completa, sólo cambia la configuración y pone el nivel "trace", para los ambientes de producción es recomandado usar logs en nivel info

Descárgalo en https://drive.google.com/file/d/0BwOqSob-RrBOT1l4UXdLZ095clE/edit?usp=sharing

6.- Conclusión:

Los logs son siempre necesarios y me atrevería a decir obligatorios de tener en cualquier aplicación, para ver que está pasando a lo largo de la aplicación, en caso de tener un error, los logs simpre salvan tu vida y tu trabajo...

7.- Links de referencias:




comments powered by Disqus