Buscar..


Introducción

Apache Log4j es una utilidad de registro basada en Java, es uno de varios marcos de trabajo de registro de Java. Este tema muestra cómo configurar y configurar Log4j en Java con ejemplos detallados de todos sus posibles aspectos de uso.

Sintaxis

  • Logger.debug ("texto para registrar"); // Registro de información de depuración
  • Logger.info ("texto para registrar"); // Registro de información común
  • Logger.error ("texto para registrar"); // Información de error de registro
  • Logger.warn ("texto para registrar"); // Advertencias de registro
  • Logger.trace ("texto para registrar"); // Registro de información de rastreo
  • Logger.fatal ("texto para registrar"); // Registro de errores fatales
  • Uso de Log4j2 con registro de parámetros:
  • Logger.debug ("Debug params {} {} {}", param1, param2, param3); // Registro de depuración con parámetros
  • Logger.info ("Información params {} {} {}", param1, param2, param3); // Registro de información con parámetros.
  • Logger.error ("Parámetros de error {} {} {}", param1, param2, param3); // Error de registro con parámetros
  • Logger.warn ("Advertir params {} {} {}", param1, param2, param3); // Registro de advertencias con parámetros.
  • Logger.trace ("Trace params {} {} {}", param1, param2, param3); // Registro de seguimiento con parámetros
  • Logger.fatal ("Fatal params {} {} {}", param1, param2, param3); // Registro fatal con parámetros
  • Logger.error ("Excepción capturada:", ex); // Excepción de registro con message y stacktrace (se agregará automáticamente)

Observaciones

Final de vida para Log4j 1 alcanzado

El 5 de agosto de 2015, el Comité de gestión de proyectos de servicios de explotación forestal anunció que Log4j 1.x había llegado al final de su vida útil. Para ver el texto completo del anuncio, consulte el Blog de Apache. Se recomienda a los usuarios de Log4j 1 que actualicen a Apache Log4j 2 .

De: http://logging.apache.org/log4j/1.2/

Como obtener Log4j

Versión actual (log4j2)

Utilizando Maven:
Agregue la siguiente dependencia a su archivo POM.xml :

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.6.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.6.2</version>
  </dependency>
</dependencies>

Usando Ivy:

<dependencies>
  <dependency org="org.apache.logging.log4j" name="log4j-api" rev="2.6.2" />
  <dependency org="org.apache.logging.log4j" name="log4j-core" rev="2.6.2" />
</dependencies>

Utilizando Gradle:

dependencies {
  compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.6.2'
  compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.6.2'
}

Obteniendo log4j 1.x


Nota: Log4j 1.x ha alcanzado el final de la vida útil (EOL) (ver Comentarios).


Utilizando Maven:

Declare esta dependencia en el archivo POM.xml :

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

Usando Ivy:

<dependency org="log4j" name="log4j" rev="1.2.17"/>

Usle Gradle:

compile group: 'log4j', name: 'log4j', version: '1.2.17'

Utilizando Buildr:

'log4j:log4j:jar:1.2.17'

Añadiendo manualmente en la construcción de la ruta:

Descargar desde el proyecto del sitio web Log4j

Cómo usar Log4j en código Java

Primero necesita crear un objeto final static logger :

final static Logger logger = Logger.getLogger(classname.class);

Luego, llame a los métodos de registro:

//logs an error message
logger.info("Information about some param: " + parameter); // Note that this line could throw a NullPointerException!

//in order to improve performance, it is advised to use the `isXXXEnabled()` Methods
if( logger.isInfoEnabled() ){
    logger.info("Information about some param: " + parameter);
}

// In log4j2 parameter substitution is preferable due to readability and performance
// The parameter substitution only takes place if info level is active which obsoletes the use of isXXXEnabled().
logger.info("Information about some param: {}" , parameter);

//logs an exception
logger.error("Information about some error: ", exception);

Configuración de archivo de propiedades

Log4j le da la posibilidad de registrar datos en la consola y el archivo al mismo tiempo. Cree un archivo log4j.properties y log4j.properties dentro de esta configuración básica:

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Si está utilizando maven, ponga este archivo de propiedades en la ruta:

/ProjectFolder/src/java/resources

Archivo de configuración log4j2.xml básico

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="debug">
      <AppenderRef ref="STDOUT"/>
    </Root>
  </Loggers>
</Configuration>

Esta es una configuración básica de log4j2.xml que tiene una aplicación de consola y un registrador de raíz. El diseño del patrón especifica qué patrón se debe utilizar para registrar las declaraciones.
Para depurar la carga de log4j2.xml puede agregar el atributo status = <WARN | DEBUG | ERROR | FATAL | TRACE | INFO> en la etiqueta de configuración de su log4j2.xml.
También puede agregar un intervalo de supervisión para que vuelva a cargar la configuración después del período de intervalo especificado. El intervalo del monitor se puede agregar a la etiqueta de configuración de la siguiente manera: monitorInterval = 30 . Esto significa que la configuración se cargará cada 30 segundos.

Migración de log4j 1.x a 2.x

Si desea migrar de log4j 1.x existente en su proyecto a log4j 2.x, elimine todas las dependencias de log4j 1.x existentes y agregue la siguiente dependencia:

Log4j 1.x API Bridge

Maven Build

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.6.2</version>
  </dependency>
</dependencies>

Construir hiedra

<dependencies>
  <dependency org="org.apache.logging.log4j" name="log4j-1.2-api" rev="2.6.2" />
</dependencies>

Construcción de Gradle

dependencies {
  compile group: 'org.apache.logging.log4j', name: 'log4j-1.2-api', version: '2.6.2'
}

Puente de registro de Apache Commons Si su proyecto está utilizando el registro de Apache Commons que usa log4j 1.x y desea migrarlo a log4j 2.x, agregue las siguientes dependencias:

Maven Build

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.6.2</version>
  </dependency>
</dependencies>

Construir hiedra

<dependencies>
  <dependency org="org.apache.logging.log4j" name="log4j-jcl" rev="2.6.2" />
</dependencies>

Construcción de Gradle

dependencies {
  compile group: 'org.apache.logging.log4j', name: 'log4j-jcl', version: '2.6.2'
}

Nota: No elimine las dependencias existentes del registro de Apache commons

Referencia: https://logging.apache.org/log4j/2.x/maven-artifacts.html

Propiedades-Archivo para iniciar sesión en DB

Para que este ejemplo funcione, necesitará un controlador JDBC compatible con el sistema en el que se ejecuta la base de datos. Puede encontrar una fuente abierta que le permite conectarse a bases de datos DB2 en un IBM System i aquí: JT400

Aunque este ejemplo es específico de DB2, funciona para casi todos los demás sistemas si intercambia el controlador y adapta la URL de JDBC.

# Root logger option
log4j.rootLogger= ERROR, DB

# Redirect log messages to a DB2
# Define the DB appender   
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL (!!! adapt to your target system !!!)
log4j.appender.DB.URL=jdbc:as400://10.10.10.1:446/DATABASENAME;naming=system;errors=full;

# Set Database Driver (!!! adapt to your target system !!!)
log4j.appender.DB.driver=com.ibm.as400.access.AS400JDBCDriver

# Set database user name and password
log4j.appender.DB.user=USER
log4j.appender.DB.password=PASSWORD

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO DB.TABLENAME VALUES('%d{yyyy-MM-dd}','%d{HH:mm:ss}','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

Filtrar Logoutput por nivel (log4j 1.x)

Puede usar un filtro para registrar solo los mensajes "más bajos" que, por ejemplo, el nivel de ERROR . Pero el filtro no es compatible con PropertyConfigurator. Así que debes cambiar a la configuración XML para usarlo . Ver log4j-Wiki sobre filtros .

Ejemplo "nivel específico"

<appender name="info-out" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="info.log"/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%m%n"/> 
            </layout> 
            <filter class="org.apache.log4j.varia.LevelMatchFilter">
                    <param name="LevelToMatch" value="info" />
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
            <filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender> 

O "rango de nivel"

<appender name="info-out" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="info.log"/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%m%n"/> 
            </layout> 
            <filter class="org.apache.log4j.varia.LevelRangeFilter">
                    <param name="LevelMax" value="info"/>
                    <param name="LevelMin" value="info"/>
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
</appender>


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow