Saltar al contenido

Archivo de configuración XML log4j2 muy simple usando la consola y el appender de archivos

Solución:

<?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:

  • Coloque el siguiente contenido en su archivo de configuración.
  • Nombre 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”)
  • Usar Logger logger = LogManager.getLogger(); para inicializar su registrador
  • Puse el InstantFlush = “falso” ya que esto es mejor para Vida útil de SSD. Si necesita el registro de inmediato en su archivo de registro, elimine el parámetro o configúrelo en verdadero

Aquí está mi simplista log4j2.xml que imprime en la consola y escribe en un archivo continuo 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) – La frecuencia con la que se debe producir un traspaso 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 renovaciones ocurriría cada 4 horas. El valor predeterminado es 1.

modular (booleano) – Indica si el intervalo debe ajustarse para que se produzca el siguiente cambio en el límite del intervalo. Por ejemplo, si el elemento es horas, la hora actual es 3 a. M. Y el intervalo es 4, entonces el primer traspaso ocurrirá a las 4 a. M. Y 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

Producción:

[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 a diario y el día anterior se cambiará automáticamente de nombre a:

cucumber_yyyy-MM-dd.log

En un proyecto de Maven, pondría el log4j2.xml en src/main/resources o src/test/resources.

log4j2 tiene un sistema de configuración muy flexible (que en mi humilde opinión es más una distracción que una ayuda), incluso puedes usar JSON. Consulte https://logging.apache.org/log4j/2.x/manual/configuration.html para obtener una referencia.

Personalmente, recién comencé a usar log4j2, pero me inclino hacia la configuración de “XML estricto” (es decir, usando atributos en lugar de nombres de elementos), que puede ser validado por esquema.

Aquí está mi ejemplo simple usando autoconfiguración y modo estricto, usando una “Propiedad” para configurar el nombre del 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>
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *