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

Resuelto Thorsten Niehues asked hace 10 años • 4 respuestas

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

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

Thorsten Niehues avatar Jan 18 '14 23:01 Thorsten Niehues
Aceptado
<?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.
  • Nombra el archivo de configuración log4j2.xml
  • Coloque log4j2.xml en una carpeta que esté en la ruta de clase (es decir, su carpeta de origen "src")
  • Úselo Logger logger = LogManager.getLogger();para inicializar su registrador
  • Configuré inmediataFlush="false" ya que es mejor para la vida útil del SSD . Si necesita el registro de inmediato en su archivo de registro, elimine el parámetro o configúrelo en verdadero
Thorsten Niehues avatar Jan 18 '2014 16:01 Thorsten Niehues

Aquí está mi archivo simplista log4j2.xmlque 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>

Política de activación basada en el tiempo

intervalo (entero) : con qué frecuencia debe ocurrir una transferencia según la unidad de tiempo más específica en el patrón de fechas. Por ejemplo, con un patrón de fecha con horas como elemento más específico y un incremento de 4 reinversiones se produciría cada 4 horas. El valor predeterminado es 1.

modular (booleano) : indica si el intervalo debe ajustarse para provocar que se produzca el siguiente desplazamiento en el límite del intervalo. Por ejemplo, si el elemento es horas, la hora actual son las 3 a. m. y el intervalo es 4, entonces el primer traspaso ocurrirá a las 4 a. m. y luego los siguientes ocurrirán a las 8 a. m., al mediodía, a las 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 diariamente y el nombre del día anterior cambiará automáticamente a:

cucumber_yyyy-MM-dd.log

En un proyecto Maven, colocarías log4j2.xmlin src/main/resources o src/test/resources .

k_rollo avatar Mar 20 '2018 09:03 k_rollo

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, recientemente comencé a usar log4j2, pero tiendo a la configuración "XML estricta" (es decir, usar atributos en lugar de nombres de elementos), que se puede validar mediante esquema.

Aquí está mi ejemplo simple usando la configuración automática y el 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>
Christof Kälin avatar Sep 29 '2016 08:09 Christof Kälin

Hay respuestas excelentes, pero si desea colorear los registros de su consola, puede usar el patrón:

<PatternLayout pattern="%style{%date{DEFAULT}}{yellow}
            [%t] %highlight{%-5level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=green} %logger{36} - %message\n"/>

El archivo log4j2 completo es:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="APP_LOG_ROOT">/opt/test/log</Property>
    </Properties>
    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="%style{%date{DEFAULT}}{yellow}
                [%t] %highlight{%-5level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=green} %logger{36} - %message\n"/>
        </Console>
        <RollingFile name="XML_ROLLING_FILE_APPENDER"
                     fileName="${APP_LOG_ROOT}/appName.log"
                     filePattern="${APP_LOG_ROOT}/appName-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout pattern="%d{DEFAULT} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="19500KB"/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
        <Logger name="com.compName.projectName" level="debug">
            <AppenderRef ref="XML_ROLLING_FILE_APPENDER"/>
        </Logger>
    </Loggers>
</Configuration>

Y los registros se verán así: ingrese la descripción de la imagen aquí

Max.Futerman avatar Sep 07 '2020 12:09 Max.Futerman