Logback per accedere diversi messaggi a due file

Sto usando logback/slf4j di fare la mia registrazione. Voglio analizzare il mio log file per analizzare alcuni dati, così invece l’analisi di un grande file di grandi dimensioni (per lo più costituito da istruzioni di debug) voglio avere due logger istanze che ogni log in un file separato; una di analisi e una per tutte le finalità di registrazione. Qualcuno sa se questo è possibile con Logback, o qualsiasi altro logger per quella materia?

InformationsquelleAutor Aly | 2010-03-21

 

3 Replies
  1. 277

    È davvero possibile fare qualcosa di simile a questo in logback. Ecco un esempio di configurazione:

    <?xml version="1.0"?>
    <configuration>
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>logfile.log</file>
            <append>true</append>
            <encoder>
                <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
            </encoder>
        </appender>
        <appender name="ANALYTICS-FILE" class="ch.qos.logback.core.FileAppender">
            <file>analytics.log</file>
            <append>true</append>
            <encoder>
                <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
            </encoder>
        </appender>
        <!-- additivity=false ensures analytics data only goes to the analytics log -->
        <logger name="analytics" level="DEBUG" additivity="false">
            <appender-ref ref="ANALYTICS-FILE"/>
        </logger>
        <root>
            <appender-ref ref="FILE"/>
        </root>
    </configuration>

    Poi sarebbe l’installazione di due distinti logger, una per tutto e uno di accedere analisi dei dati in questo modo:

    Logger analytics = LoggerFactory.getLogger("analytics");
    • Ho bisogno di fare questo genere di cose in modo che io possa avere un no-la linea di alimentazione appender e regolare appender per lo stesso file. Grazie per questa info.
    • IMO additività=false dovrebbe essere di default, se diverso appender-rif specificato. Molto spesso riceviamo applicazione in cui alcuni moduli saranno molto frequenti registro di generatori a causa di alcuni eventi timer, e vorremmo separare i log in file diversi. La registrazione stessa log in 10 differenti file realtà non ha senso. Quindi dovrebbe essere un opt in funzione non di default. Dal logback era una riscrittura lo stesso errore dovrebbe essere stato risolto dallo stesso autore.
    • Voglio log di errore,eseguire il debug,info messaggi in file diversi, rispettivamente . E ‘ possibile con l’logback.xml
    • che possibile. Vedere – amitstechblog.wordpress.com/2014/09/27/…
    • Sto cercando di registro registri diversi pacchetti di file diversi, come questa risposta suggerire, ma che non funziona per me. Il mio logback xml estratto è qui – pastebin.com/Aii4f1Jk. Sto cercando di registro di sospensione pacchetto a livello di TRACCIA registri in un file diverso. Qualche suggerimento?
    • analytics non viene stampato il nome del pacchetto, invece, stampe analitiche.nome del metodo. come stampare il nome del pacchetto, anche dopo l’utilizzo di stringa come un logger nome

  2. 3

    Si può disporre di un numero di registrazione che si desidera. Ma, è meglio avere uno per ogni pacchetto che avete bisogno di accedere in modo diverso. Quindi tutte le classi nel pacchetto e le sue sotto-pacchetti saranno mostrati anche l’specifica logger. Tutti possono condividere la radice logger e inviare i propri dati di log radice logger appender utilizzo di additività=”true”. Ecco un esempio:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
    <property name="pattern" value="%date{HH:mm:ss.SSS} %-5p %logger{36} 
    %X{akkaSource} [%file:%line] - %m%n" />
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} %-5p %logger{36} %X{akkaSource} [%file:%line] - %m%n</pattern>
        </encoder>
    </appender>
    
    <appender name="abc" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/worker.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/worker-%d{yyyy-MM-dd_HH}.log</fileNamePattern>
            <maxHistory>360</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    
    <appender name="xyz" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/transformer.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/transformer-%d{yyyy-MM-dd_HH}.log</fileNamePattern>
            <maxHistory>360</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    
    <logger name="com.xxx.yyy.zzz" level="INFO" additivity="true">
        <appender-ref ref="xyz"/>
    </logger>
    
    <logger name="com.aaa.bbb.ccc" level="INFO" additivity="true">
        <appender-ref ref="abc"/>
    </logger>
    
    <root>
        <level value="INFO" />
        <appender-ref ref="STDOUT" />
    </root>

  3. 2

    nel mio caso ho voluto lasciare i nomi di classe come nome registro

    private static final Logger log = LoggerFactory.getLogger(ScheduledPost.class);

    e come ho avuto poche di queste classi, quindi il mio logback.xml

    <!--additivity=false ensures this log data only goes to the this log, and no one more -->
    <logger name="xxx.xxx.xxx.ScheduledPost" level="DEBUG" additivity="false">
        <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
    </logger>
    <logger name="xxx.xxx.xxx.GcmPost" level="DEBUG" additivity="false">
        <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
    </logger>
    <logger name="xxx.xxx.xxx.PushUtils" level="DEBUG" additivity="false">
        <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
    </logger>

Lascia un commento