Me gustaría un archivo de configuración XML muy simple con una consola y un complemento de archivo usando log4j2.
(El sitio web de Apache me está matando con mucha información).
Me gustaría un archivo de configuración XML muy simple con una consola y un complemento de archivo usando log4j2.
(El sitio web de Apache me está matando con mucha información).
Respuestas:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<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="all.log" immediateFlush="false" append="false">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
Notas:
Logger logger = LogManager.getLogger();
para inicializar su registradorAquí está mi simplista log4j2.xml
que 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"?>
<Configuration status="WARN">
<Properties>
<Property name="logPath">target/cucumber-logs</Property>
<Property name="rollingFileName">cucumber</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}" />
</Console>
<RollingFile name="rollingFile" fileName="${logPath}/${rollingFileName}.log" filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log">
<PatternLayout pattern="[%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 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="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.
Fuente: https://logging.apache.org/log4j/2.x/manual/appenders.html
Salida:
[INFO ] 2018-07-21 12:03:47,412 ScenarioHook.beforeScenario() - Browser=CHROME32_NOHEAD
[INFO ] 2018-07-21 12:03:48,623 ScenarioHook.beforeScenario() - Screen Resolution (WxH)=1366x768
[DEBUG] 2018-07-21 12:03:52,125 HomePageNavigationSteps.I_Am_At_The_Home_Page() - Base URL=http://simplydo.com/projector/
[DEBUG] 2018-07-21 12:03:52,700 NetIncomeProjectorSteps.I_Enter_My_Start_Balance() - Start Balance=348000
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
de src/main/resources
o src/test/resources
.
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:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorinterval="30" status="info" strict="true">
<Properties>
<Property name="filename">log/CelsiusConverter.log</Property>
</Properties>
<Appenders>
<Appender type="Console" name="Console">
<Layout type="PatternLayout" pattern="%d %p [%t] %m%n" />
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n" />
</Appender>
<Appender type="File" name="File" fileName="${filename}">
<Layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n" />
</Appender>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="File" />
<AppenderRef ref="Console" />
<!-- Use FLOW to trace down exact method sending the msg -->
<!-- <AppenderRef ref="FLOW" /> -->
</Root>
</Loggers>
</Configuration>
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?)