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


Me gustaría un archivo de configuración XML muy simple con una consola y un archivo appender usando log4j2.

(El sitio web Apache me está matando con mucha información.)

Author: Thorsten Niehues, 2014-01-18

3 answers

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

  • Ponga el siguiente contenido en su archivo de configuración.
  • Nombre el archivo de configuración log4j2.xml
  • Ponga el 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 immediateFlush="false" ya que esto es mejor para SSD lifetime. Si necesita el registro de inmediato en su archivo de registro, elimine el parámetro o configúrelo en verdadero
 221
Author: Thorsten Niehues,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-18 16:59:51

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 puede usar JSON. Véase https://logging.apache.org/log4j/2.x/manual/configuration.html para una referencia.

Personalmente, acabo de empezar a usar log4j2, pero estoy tendiendo hacia la configuración "XML estricto" (es decir, el uso de 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 establecer 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>
 11
Author: Christof Kälin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-29 08:14:23

Aquí 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>

Política de regulación de tiempo

Interval (integer) - La frecuencia con la que debe ocurrir un rollover basado en unidad de tiempo más específica en el patrón de fecha. Por ejemplo, con una fecha patrón con horas como el elemento más específico e incremento de 4 los rollovers ocurrirían cada 4 horas. El valor predeterminado es 1.

Modular (boolean) - Indica si el intervalo debe ajustarse para hacer que se produzca el siguiente vuelco en el límite del intervalo. Para ejemplo, si el elemento es horas, la hora actual es 3 am y el el intervalo es 4, luego el primer vuelco se producirá a las 4 am y luego el siguiente se producirán a las 8 am, mediodía, 4 pm, 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 diario con el día anterior renombrado automáticamente a:

cucumber_yyyy-MM-dd.log

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

 8
Author: silver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-21 04:06:55