Ponga el siguiente contenido en su archivo de configuración.
Denomine el archivo de configuración log4j2.xml
Coloque log4j2.xml en una carpeta que se encuentra en la ruta de clase (es decir, su carpeta de origen "src")
Use Logger logger = LogManager.getLogger();para inicializar su registrador
Establecí el valor inmediatoFlush = "false" ya que esto es mejor para la vida útil de SSD . Si necesita el registro de inmediato en su archivo de registro, elimine el parámetro o configúrelo como verdadero
Para completar, se recomienda el uso de inmediatamenteFlush = "false" cuando se utilizan Async Loggers o AsyncAppender.
Remko Popma
1
Antecedentes: initialFlush = "false" permite que los componentes asíncronos de Log4J2 agrupen múltiples eventos de registro en una sola escritura de disco. Como beneficio adicional, sus eventos de registro más recientes siempre se escriben en el disco y nunca se cuelgan en un búfer de memoria. (Algo que encontré molesto sobre log4j-1.2.)
Remko Popma
1
No pude conseguir que los ejemplos en el sitio Log4j 2.0 funcionaran, pero este sí. Gracias.
djangofan
12
Por favor, añadir el hecho de que una limpieza puede ser necesaria para aquellos que utilizan eclipse. Por el bien de la humanidad.
Reut Sharabani
1
@ThorstenNiehues No puedo editar mi comentario anterior, pero eclipse copia la configuración cuando construyes, y por alguna razón no siempre copia el log4j.xml incluso si cambia. Al menos eso fue lo que me resolvió.
Reut Sharabani
19
Aquí está mi simplista log4j2.xmlque imprime en la consola y escribe en un archivo rodante diario:
// java
private static final Logger LOGGER = LogManager.getLogger(MyClass.class);
// log4j2.xml<?xml version="1.0" encoding="UTF-8"?><Configurationstatus="WARN"><Properties><Propertyname="logPath">target/cucumber-logs</Property><Propertyname="rollingFileName">cucumber</Property></Properties><Appenders><Consolename="console"target="SYSTEM_OUT"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/></Console><RollingFilename="rollingFile"fileName="${logPath}/${rollingFileName}.log"filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/><Policies><!-- Causes a rollover if the log file is older than the current JVM's start time --><OnStartupTriggeringPolicy/><!-- Causes a rollover once the date/time pattern no longer applies to the active file --><TimeBasedTriggeringPolicyinterval="1"modulate="true"/></Policies></RollingFile></Appenders><Loggers><Rootlevel="DEBUG"additivity="false"><AppenderRefref="console"/><AppenderRefref="rollingFile"/></Root></Loggers></Configuration>
TimeBasedTriggeringPolicy
intervalo (entero) : con qué frecuencia debe producirse una reinversión en función de la unidad de tiempo más específica en el patrón de fecha. Por ejemplo, con un patrón de fecha con horas como el elemento más específico y un incremento de 4 vuelcos ocurriría cada 4 horas. El valor predeterminado es 1.
modulate (boolean) : indica si el intervalo debe ajustarse para que se produzca el siguiente rollover en el límite del intervalo. Por ejemplo, si el artículo es horas, la hora actual es las 3 a.m. y el intervalo es 4, entonces el primer vuelco ocurrirá a las 4 a.m. y luego los siguientes ocurrirán a las 8 a.m., mediodía, 4 p.m., etc.
Personalmente, recientemente comencé a usar log4j2, pero estoy tendiendo a la configuración de "XML estricto" (es decir, usando atributos en lugar de nombres de elementos), que pueden ser validados por esquema.
Aquí está mi ejemplo simple usando autoconfiguración y modo estricto, usando una "Propiedad" para configurar el nombre de archivo:
<?xml version="1.0" encoding="UTF-8"?><Configurationmonitorinterval="30"status="info"strict="true"><Properties><Propertyname="filename">log/CelsiusConverter.log</Property></Properties><Appenders><Appendertype="Console"name="Console"><Layouttype="PatternLayout"pattern="%d %p [%t] %m%n"/></Appender><Appendertype="Console"name="FLOW"><Layouttype="PatternLayout"pattern="%C{1}.%M %m %ex%n"/></Appender><Appendertype="File"name="File"fileName="${filename}"><Layouttype="PatternLayout"pattern="%d %p %C{1.} [%t] %m%n"/></Appender></Appenders><Loggers><Rootlevel="debug"><AppenderRefref="File"/><AppenderRefref="Console"/><!-- Use FLOW to trace down exact method sending the msg --><!-- <AppenderRef ref="FLOW" /> --></Root></Loggers></Configuration>
La configuración flexible es útil cuando intentas separar la configuración de la compilación y poner la configuración en un repositorio en otro lugar. Desafortunadamente, las complejidades lo están volviendo un poco molesto, pero pensé que arrojaría un beneficio a las opciones flexibles de configuración.
adprocas
¿Cuál es la Filepolítica aquí? ¿Cuál es el tamaño máximo de archivo? ¿Y cómo se escribe en el archivo? (¿el archivo siempre contiene los últimos 10 MB de registros?)
Respuestas:
Notas:
Logger logger = LogManager.getLogger();
para inicializar su registradorfuente
Aquí está mi simplista
log4j2.xml
que imprime en la consola y escribe en un archivo rodante diario:Salida:
Se creará un nuevo archivo de registro diariamente con el día anterior automáticamente renombrado a:
cucumber_yyyy-MM-dd.log
En un proyecto Maven, que pondría el
log4j2.xml
desrc/main/resources
osrc/test/resources
.fuente
log4j2 tiene un sistema de configuración muy flexible (en mi humilde opinión es más una distracción que una ayuda), incluso puede usar JSON. Consulte https://logging.apache.org/log4j/2.x/manual/configuration.html para obtener una referencia.
Personalmente, recientemente comencé a usar log4j2, pero estoy tendiendo a la configuración de "XML estricto" (es decir, usando atributos en lugar de nombres de elementos), que pueden ser validados por esquema.
Aquí está mi ejemplo simple usando autoconfiguración y modo estricto, usando una "Propiedad" para configurar el nombre de archivo:
fuente
File
política aquí? ¿Cuál es el tamaño máximo de archivo? ¿Y cómo se escribe en el archivo? (¿el archivo siempre contiene los últimos 10 MB de registros?)