2016-06-10 34 views
7

Nella mia applicazione, vorrei registrare alcuni messaggi provenienti dal mio codice in un modo specifico rispetto a tutti gli altri messaggi registrati. Tuttavia non sono sicuro di come posso evitare che vengano automaticamente registrati nel log logger logack.Come evitare la doppia registrazione con il logback?

Utilizzando questa configurazione di seguito, mi piacerebbe utilizzare il codice come segue (scala) in modo che possa registrare determinati messaggi solo per quel logger.

val logger: Logger = LoggerFactory.getLogger("data-logger") 

Tuttavia nella configurazione di seguito, questi messaggi vengono registrati due volte, cioè esse vengono registrati anche dal logger principale. Come posso evitarlo? devo usare artificialmente un livello di registrazione diverso per ottenere qualcosa di simile con il logback?

<configuration> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>logs/activity.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
     <fileNamePattern>activity.%i.log.zip</fileNamePattern> 
     <minIndex>1</minIndex> 
     <maxIndex>10</maxIndex> 
    </rollingPolicy> 
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <maxFileSize>10MB</maxFileSize> 
    </triggeringPolicy> 
    <encoder> 
     <pattern>%msg%n</pattern> 
    </encoder> 
    </appender> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>%msg%n</pattern> 
    </encoder> 
    </appender> 

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 
    <!-- use discarding threshold of zero to avoid ignoring INFO level messages see docs --> 
    <discardingThreshold>0</discardingThreshold> 
     <appender-ref ref="FILE" /> 
    </appender> 

    <root level="info"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="ASYNC" /> 
    </root> 

    <logger name="data-logger" level="info"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="ASYNC" /> 
    </logger> 

</configuration> 
+0

Se la domanda di riferimento fosse stata modificata per avere un titolo che riflette ciò che tratta forse si potrebbe dire che sono duplicati. Segnalare come duplicato senza controllare la qualità dell'altro, è sciatto e dovrebbe essere bandito. – matanster

risposta

10

logger sono gerarchici, ed ogni messaggio inviato a un logger saranno inviati a tutti i suoi antenati per impostazione predefinita. È possibile disabilitare questo comportamento impostando additivity=false. Ad es .:

<logger name="data-logger" level="info" additivity="false">