log - tomcat context.xml example
log4j2 especifica la ruta relativa al directorio de inicio de tomcat para FileAppender (2)
Después de muchas horas tratando de resolver mis propios problemas con log4j2 file logging con Tomcat encontré otra posible causa. ¡Con suerte, esto le ahorra a alguien más un tiempo más adelante!
Tenía mi directorio de Tomcat ubicado en /Library/Tomcat
. Al final, intenté reinstalar Tomcat, esta vez colocando el directorio de trabajo en /usr/local
con un enlace simbólico a /Library/Tomcat
. Esto, junto con la sugerencia de Moemars de incluir el prefijo sys
resolvió mis problemas de registro.
Estoy intentando configurar log4j2 para mi servidor Tomcat ejecutándose localmente. No puedo conectar los registros a una ubicación relativa a la instalación de tomcat.
Si especifico una ruta absoluta, funciona. Si utilizo una ruta relativa, la salida a la ubicación de System.getProperty("user.dir")
.
Pero cuando intento usar ${catalina.home}
o ${catalina.base}
, no funciona. Si imprimo esas dos propiedades del sistema al inicio, se definen y señalan la ubicación correcta.
También,
- Tomcat 7.0.26
- servlet 2.5
- log4j2.0 beta 8
- estamos usando slf4j con log4j2 detrás de él.
- Configuro todos los registradores para que sean asincrónicos a través de la variable de entorno
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
.
Mi sensación es que Tomcat podría no estar completamente inicializado cuando procesa log4j2.xml. ¡Cualquier idea sería muy apreciada!
Aquí está mi log4j2.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="debug" name="LoggingConfig">
<appenders>
<FastFile name="ALog" fileName="${catalina.home}/logs/test.log" immediateFlush="true" append="true">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
</FastFile>
</appenders>
<loggers>
<logger name="a.namespace.dir" level="info" additivity="false">
<appender-ref ref="ALog"/>
</logger>
<root level="info">
<appender-ref ref="ALog"/>
</root>
</loggers>
</configuration>
De catalina.out
2013-07-31 11:22:00,313 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.FastFileAppender for element FastFile with params(fileName="${catalina.home}/logs/test.log", append="true", name="ALog", immediateFlush="true", suppressExceptions="null", PatternLayout(%d %p %c{1.} [%t] %m%n), null, advertise="null", advertiseURI="null", Configuration(LoggingConfig))
2013-07-31 11:22:00,315 DEBUG Starting FastFileManager ${catalina.home}/logs/test.log
2013-07-31 11:22:00,316 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.plugins.AppendersPlugin for element appenders with params(appenders={ALog})
2013-07-31 11:22:00,317 DEBUG Generated plugins in 0.000016000 seconds
2013-07-31 11:22:00,318 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="ALog", level="null", null)
2013-07-31 11:22:00,320 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element logger with params(additivity="false", level="info", name="a.namespace.dir", includeLocation="null", appender-ref={org.apache.logging.log4j.core.config.AppenderRef@6e8ef177}, properties={}, Configuration(LoggingConfig), null)
2013-07-31 11:22:00,321 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="ALog", level="null", null)
2013-07-31 11:22:00,322 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element root with params(additivity="null", level="info", includeLocation="null", appender-ref={org.apache.logging.log4j.core.config.AppenderRef@6a8ef455}, properties={}, Configuration(LoggingConfig), null)
2013-07-31 11:22:00,323 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.plugins.LoggersPlugin for element loggers with params(loggers={a.namespace.dir, root})
Resolví mi propio problema. Para las propiedades del sistema, debe prefijar variables con sys:
<FastFile name="ALog" fileName="${sys:catalina.home}/logs/test.log" immediateFlush="true" append="true">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
</FastFile>
Lo encontré después de volver a leer esta parte de la documentación: http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution