example debug custom configurar java logging log4j

java - debug - log4j levels order



Configurando RollingFileAppender en log4j (8)

De acuerdo con Log4jXmlFormat no puede configurarlo con log4j.properties, sino solo con el formato de configuración XML:

Tenga en cuenta que TimeBasedRollingPolicy solo se puede configurar con xml, no con log4j.properties

Desafortunadamente, el ejemplo log4j.xml que proporcionan tampoco funciona:

log4j:ERROR Parsing error on line 14 and column 76 log4j:ERROR Element type "rollingPolicy" must be declared. ... log4j:WARN Please set a rolling policy for the RollingFileAppender named ''FILE''

Estoy trabajando en un conjunto de servicios web y nos gustaría tener un registro diario rotado.

Estoy tratando de obtener org.apache.log4j.rolling.RollingFileAppender del complemento log4j que funciona, ya que la documentación sugiere que esto es lo mejor para entornos de producción.

Tengo tanto la biblioteca log4J principal ( log4j-1.2.15.jar ) como la biblioteca de extras log4j ( apache-log4j-extras-1.1.jar ) en el classpath.

Tengo la siguiente configuración para el appender en el archivo log4j.properties :

### SOAP Request Appender log4j.appender.request=org.apache.log4j.rolling.RollingFileAppender log4j.appender.request.File=SOAPmessages.log log4j.appender.request.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy log4j.appender.request.RollingPolicy.ActiveFileName =SOAPmessages-%d.log log4j.appender.request.RollingPolicy.FileNamePattern=SOAPmessages-%d.log.zip log4j.appender.request.layout = org.apache.log4j.PatternLayout log4j.appender.request.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

Sin embargo, cuando inicio el servicio web con log4j en modo de depuración obtengo estos mensajes de error:

log4j: Parsing appender named "request". log4j: Parsing layout options for "request". log4j: Setting property [conversionPattern] to [%d{ABSOLUTE} %5p %c{1}:%L - %m%n]. log4j: End of parsing for "request". log4j: Setting property [file] to [/logs/SOAPmessages.log]. log4j:WARN Failed to set property [rollingPolicy] to value "org.apache.log4j.rolling.TimeBasedRollingPolicy". log4j:WARN Please set a rolling policy for the RollingFileAppender named ''request'' log4j: Parsed "request" options.

He encontrado documentación sobre cómo configurar este appender un poco escaso, así que ¿alguien puede ayudarme a arreglar mi configuración?

EDIT0: salida de modo de depuración agregada, en lugar de solo las advertencias estándar


En Log4j2, la lib de "extras" ya no es obligatoria. También el formato de configuración ha cambiado.

Un ejemplo se proporciona en la documentación de Apache

property.filename = /foo/bar/test.log appender.rolling.type = RollingFile appender.rolling.name = RollingFile appender.rolling.fileName = ${filename} appender.rolling.filePattern = /foo/bar/rolling/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz appender.rolling.layout.type = PatternLayout appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n appender.rolling.policies.type = Policies appender.rolling.policies.time.type = TimeBasedTriggeringPolicy appender.rolling.policies.time.interval = 2 appender.rolling.policies.time.modulate = true appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.size=100MB appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.max = 5 logger.rolling.name = com.example.my.class logger.rolling.level = debug logger.rolling.additivity = false logger.rolling.appenderRef.rolling.ref = RollingFile


En relación con el error: log4j:ERROR Element type "rollingPolicy" must be declared

  1. Utilice una versión de log4j.jar más nueva que log4j-1.2.14.jar, que tiene un log4j.dtd define rollingPolicy .
  2. por supuesto, también necesitas apache-log4j-extras-1.1.jar
  3. Verifique si hay otros archivos jar de terceros que esté utilizando, quizás tenga una versión anterior de log4j.jar empaquetada dentro. De ser así, asegúrese de que su log4j.jar esté primero en el orden antes de que el tercero contenga el log4j.jar anterior.

Enfrentó más problemas mientras hacía esto. Aquí están los detalles:

  1. Para descargar y agregar apache-log4j-extras-1.1.jar en el classpath, no lo noté al principio.
  2. El RollingFileAppender debe ser org.apache.log4j.rolling.RollingFileAppender lugar de org.apache.log4j.RollingFileAppender . Esto puede dar el error: log4j:ERROR No output stream or file set for the appender named [file].
  3. Tuvimos que actualizar la biblioteca log4j-1.2.14.jar de log4j-1.2.14.jar a log4j-1.2.16.jar .

A continuación se muestra la configuración del apéndice que funcionó para mí:

<appender name="file" class="org.apache.log4j.rolling.RollingFileAppender"> <param name="threshold" value="debug" /> <rollingPolicy name="file" class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> <param name="FileNamePattern" value="logs/MyLog-%d{yyyy-MM-dd-HH-mm}.log.gz" /> <!-- The below param will keep the live update file in a different location--> <!-- param name="ActiveFileName" value="current/MyLog.log" /--> </rollingPolicy> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" /> </layout> </appender>


Tienes un mal nombre de paquete

org.apache.log4j.rolling.RollingFileAppender

El correcto es:

org.apache.log4j.RollingFileAppender


Toolbear74 tiene razón log4j.XML es obligatorio. Para que el XML valide las etiquetas <param> deben ser ANTES de <rollingPolicy> Sugiero establecer un umbral de registro <param name="threshold" value="info"/>

Al crear un archivo Log4j.xml, no olvide copiar log4j.dtd en la misma ubicación.

Aquí hay un ejemplo:

<?xml version="1.0" encoding="windows-1252"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" > <log4j:configuration> <!-- Daily Rolling File Appender that compresses old files --> <appender name="file" class="org.apache.log4j.rolling.RollingFileAppender" > <param name="threshold" value="info"/> <rollingPolicy name="file" class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> <param name="FileNamePattern" value="${catalina.base}/logs/myapp.log.%d{yyyy-MM-dd}.gz"/> <param name="ActiveFileName" value="${catalina.base}/logs/myapp.log"/> </rollingPolicy> <layout class="org.apache.log4j.EnhancedPatternLayout" > <param name="ConversionPattern" value="%d{ISO8601} %-5p - %-26.26c{1} - %m%n" /> </layout> </appender> <root> <priority value="debug"></priority> <appender-ref ref="file" /> </root> </log4j:configuration>

Teniendo en cuenta que al establecer un FileNamePattern y un ActiveFileName , creo que establecer una propiedad File es redundante y posiblemente incluso erróneo

Intenta renombrar tu log4j.properties y colocar un log4j.xml similar a mi ejemplo y ver qué pasa.


Tuve un problema similar y acabo de encontrar una manera de resolverlo (mediante un solo paso a través log4j-extras fuente log4j-extras , nada menos ...)

La buena noticia es que, a diferencia de lo que está escrito en todas partes, resulta que usted PUEDE configurar TimeBasedRollingPolicy usando log4j.properties (¡No es necesaria la configuración XML! Al menos en las versiones de log4j> 1.2.16 vea este issues.apache.org/bugzilla/show_bug.cgi?id=36384 )

Aquí hay un ejemplo:

log4j.appender.File = org.apache.log4j.rolling.RollingFileAppender log4j.appender.File.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy log4j.appender.File.rollingPolicy.FileNamePattern = logs/worker-${instanceId}.%d{yyyyMMdd-HHmm}.log

Por cierto, el bit ${instanceId} es algo que estoy usando en el EC2 de Amazon para distinguir los registros de todos mis trabajadores: solo necesito establecer esa propiedad antes de llamar a PropertyConfigurator.configure() , como se muestra a continuación:

p.setProperty("instanceId", EC2Util.getMyInstanceId()); PropertyConfigurator.configure(p);


ActiveFileName propiedad ActiveFileName . De acuerdo con log4j javadoc, no hay tal propiedad en la clase TimeBasedRollingPolicy . (Sin los métodos setActiveFileName o getActiveFileName ).

No sé qué sería lo que especificaría una propiedad desconocida, pero es posible que haga que se abandone el objeto que contiene, y eso podría dar lugar a las advertencias que usted vio.

Trata de dejarlo y ver qué pasa.