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
- Utilice una versión de log4j.jar más nueva que log4j-1.2.14.jar, que tiene un
log4j.dtd
definerollingPolicy
. - por supuesto, también necesitas
apache-log4j-extras-1.1.jar
- 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:
- Para descargar y agregar
apache-log4j-extras-1.1.jar
en el classpath, no lo noté al principio. - El
RollingFileAppender
debe serorg.apache.log4j.rolling.RollingFileAppender
lugar deorg.apache.log4j.RollingFileAppender
. Esto puede dar el error:log4j:ERROR No output stream or file set for the appender named [file].
- Tuvimos que actualizar la biblioteca
log4j-1.2.14.jar
delog4j-1.2.14.jar
alog4j-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.