Java >> Java tutorial >  >> Tag >> Log4j

hvordan logger man kun ét niveau med log4j2?

Jeg bruger log4j2 i min applikation.

Det, jeg vil have, er alt op til 'debug' for at gå til konsollen, alt op til 'info' for at gå til myapp.log, og KUN 'info' for at gå til 'myapp-audit.log'.

Årsagen er, at INFO for det meste består af vellykkede ændringer af data (f.eks. 'bruger oprettet', 'bruger opdateret', 'bruger slettet' og så videre). If er faktisk en revisionslog over dataændringer.

Men jeg kan ikke finde ud af, hvordan man gør det.

Hvordan får jeg KUN 'info' for at blive logget på 'myapp-audit.log'? Her er min nuværende konfiguration …

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <File name="LogFile" fileName="myapp.log">
            <PatternLayout
                pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>

        <File name="AuditFile" fileName="myapp-audit.log">
            <PatternLayout
                pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>
    </appenders>

    <loggers>
        <root level="debug">
            <appender-ref ref="Console" level="debug" />
            <appender-ref ref="LogFile" level="info" />
            <appender-ref ref="AuditFile" level="info" /> <!-- I want ONLY 'info' here -->
        </root>
    </loggers>
</configuration>

Svar

Hvis du angiver INFO i appender-referen, vil appenderen modtage INFO, WARN, ERROR og FATAL begivenheder. Du kan yderligere begrænse til kun INFO ved at bortfiltrere hændelser på niveauet WARN, ERROR og FATAL:

<File name="AuditFile" fileName="myapp-audit.log">
    <PatternLayout 
       pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%nZ" />
    <Filters>

        <!-- First deny warn, error and fatal messages -->
        <ThresholdFilter level="warn"  onMatch="DENY" onMismatch="NEUTRAL"/>
        <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
        <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>

        <!-- Then accept info, warn, error, fatal and deny debug/trace -->
        <ThresholdFilter level="info"  onMatch="ACCEPT" onMismatch="DENY"/>
    </Filters>
</File>

Java tag