statuslogger simple found example error xml log4j log4j2

simple - log4j2.xml example



log4j2 configuraciĆ³n xml-Iniciar sesiĆ³n en el archivo y la consola(con diferentes niveles) (4)

¡Me lo imaginé! La etiqueta <Logger> no debe utilizarse en este caso, consulte la respuesta de Gaurang Patel para obtener más información.

<?xml version="1.0" encoding="UTF-8"?> <configuration status="WARN"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <File name="MyFile" fileName="logs/app.log"> <PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </File> </appenders> <loggers> <root level="debug"> <appender-ref ref="Console" level="info"/> <appender-ref ref="MyFile" level="error"/> </root> </loggers> </configuration>

Quiero hacer dos cosas:

  1. Inicie sesión en la consola con un cierto nivel de registro
  2. Iniciar sesión para archivar con otro nivel de registro

El registro de la consola parece funcionar bien, pero el archivo de registro se mantiene vacío.

Este es mi log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> <configuration status="WARN"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <File name="MyFile" fileName="logs/app.log" immediateFlush="true"> <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </File> </appenders> <loggers> <logger name="filelogger" level="error"> <appender-ref ref="MyFile"/> </logger> <root level="info"> <appender-ref ref="Console"/> </root> </loggers> </configuration>

¿Qué podría estar mal?


Aunque Daker había puesto el archivo de configuración corregido pero no lo explicó. Me gustaría añadir una explicación aquí. Como se cita en la Documentación Log4j2 here , el uso de la etiqueta <Logger> no fue requerido para el requisito dado. Además, ¿cuándo deberías usar la etiqueta <Logger>? Lea a continuación la explicación de la documentación,

Tal vez se desee eliminar toda la salida TRACE de todo excepto com.foo.Bar. Simplemente cambiando el nivel de registro no lograría la tarea. En su lugar, la solución es agregar una nueva definición de registrador a la configuración:

<Loggers> <Logger name="com.foo.Bar" level="TRACE"/> <Root level="ERROR"> <AppenderRef ref="STDOUT"> </Root> ... </Loggers>


Uso <ThresholdFilter /> y <AppenderRef level=""> para hacer esto

  • Consola : salida todo
  • app.log :> = info, excepto error
  • error.log :> = error

VER

  • <ThresholdFilter level = "error" onMatch = "DENY" onMismatch = "ACCEPT" />

  • <AppenderRef ref = "fileLogger" level = "info" />

<?xml version="1.0" encoding="UTF-8"?> <Configuration status="error" monitorInterval="5"> <!-- status:error mean ONLY show log4j kernel''s error log in console--> <Properties> <Property name="APP_LOG_ROOT">Your log''s path</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" /> </Console> <RollingFile name="fileLogger" fileName="${APP_LOG_ROOT}/app.log" filePattern="${APP_LOG_ROOT}/app-%d{yyyy-MM-dd}.log"> <!-- Except Error --> <ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"/> <PatternLayout> <pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> </RollingFile> <RollingFile name="errorLogger" fileName="${APP_LOG_ROOT}/error.log" filePattern="${APP_LOG_ROOT}/error-%d{yyyy-MM-dd}.log"> <PatternLayout> <pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> </RollingFile> </Appenders> <Loggers> <Root level="trace" > <AppenderRef ref="Console" level="trace" /> <AppenderRef ref="fileLogger" level="info" /> <AppenderRef ref="errorLogger" level="error" /> </Root> </Loggers> </Configuration>


<logger name="filelogger" level="error" >
Este debería ser el problema. El nombre del registrador generalmente es el nombre de su paquete (a menos que lo haya llamado específicamente filelogger ).
Pruebe <logger name="com.yourpackage" level="error" additivity="true">

Consulte here