2013-02-25 20 views
6

Ho una configurazione logback che ha un appender con un filtro di soglia:logback - la riassegnazione di un livello di registro per un logger specifici

<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>INFO</level> 
    </filter> 
    ... 
</appender> 

Questo assicura che solo informazioni e più alta (in guardia, errore) vengono registrati in syslog . Tuttavia, una delle librerie di terze parti che usiamo sta registrando un evento particolare su DEBUG, e vorrei registrare questo evento su syslog. Il primo approccio che avevo in mente era di provare a rimappare il livello di log nel logger, ma non sono sicuro che sia possibile? Qualcosa del tipo:

<logger name="akka.some.Thing" level="DEBUG" logAs="INFO"> 
    <appender-ref ref="SYSLOG" /> 
</logger> 

ovviamente, il parametro "logAs" non esiste, quindi non posso farlo. Quale sarebbe l'approccio migliore per registrare akka.some.Thing sull'appender SYSLOG lasciando il filtro in posizione per altri logger?

L'altro approccio sarebbe quello di creare un secondo appender chiamato SYSLOG2 che non ha il filtro sul posto e impostare il logger specifico per utilizzarlo, ma si chiedeva se c'era un modo per configurare il logback con solo 1 appender SYSLOG ...

Grazie,

+0

Perché hai il filtro Soglia? Le altre configurazioni di "logger" inviano livelli superiori a INFO a questo appender? Se è così, perché? –

+0

Sì, registriamo in 2 posizioni. l'appender di syslog finisce in un indicizzatore con gruppi di licenze, quindi non vogliamo mai registrare nulla di più basso di INFO. Tuttavia, quando vogliamo eseguire il debug abilitiamo il debug e questo va a un appender di file (senza tutto il gunk di debug in syslog). – Brett

+1

Interessante. Se il tuo ambiente lo consente, il modo più semplice sarebbe quello di scrivere il tuo piccolo filtro che DENY avrebbe qualsiasi cosa che avesse problemi di licenza. Altrimenti, uno dei filtri più complessi, che consente espressioni, potrebbe funzionare, ma un secondo appender sarà probabilmente più facile da capire e mantenere. –

risposta

6

So che questa è una vecchia domanda, ma in realtà è possibile fare ciò che l'OP vuole fare con un singolo SyslogAppender.

Se altri sono alla ricerca di un esempio di rimappatura, è possibile dare un'occhiata alla classe org.springframework.boot.logging.logback.LevelRemappingAppender. Con questo appender è possibile sia rimappare ciò che l'appender è finalmente utilizzato per l'evento del registro, ed è anche possibile rimappare il livello utilizzato per l'evento di registro finale - ad es. cambiando un livello DEBUG in un livello INFO.

esempio di utilizzo nel file di configurazione logback (tratto da https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml):

<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender"> 
    <!-- Optional: specify the destination logger the event ends up in --> 
    <destinationLogger>org.springframework.boot</destinationLogger> 
    <!-- Optional: specify log level remapping --> 
    <remapLevels>INFO->DEBUG,ERROR->WARN</remapLevels> 
</appender> 

<logger name="org.thymeleaf" additivity="false"> 
    <appender-ref ref="DEBUG_LEVEL_REMAPPER"/> 
</logger> 

Nota che rimappatura a uno specifico logger destinazione può rendere più difficile trovare il codice sorgente della manifestazione registro originale - in modo da utilizzare con cura.

3

Cosa si può fare, sta scrivendo un secondo registratore + appender con la stessa uscita:

<appender name="SYSLOG-2" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>DEBUG</level> 
    </filter> 
    ... 
</appender> 

<logger name="akka.some.Thing" level="DEBUG"> 
    <appender-ref ref="SYSLOG-2" /> 
</logger> 

Questo aggiungerà i vostri compiti specifici DEBUG alla stessa uscita.

+0

sì - questa era la mia idea - "l'altro approccio sarebbe quello di creare un secondo appender" come per il mio post originale - "ma mi chiedevo se c'è un modo per configurare il logback con solo 1 appender" era il trucco. L'unico modo per fare con 1 appender è scrivere un appender personalizzato che accetti una configurazione di tipo "rimappatura" per logger, immagino. – Brett

Problemi correlati