2010-03-21 29 views
108

Günlük kaydını yapmak için logback/slf4j kullanıyorum. Bazı verileri analiz etmek için günlük dosyamı ayrıştırmak istiyorum, bu yüzden büyük bir büyük dosyayı (çoğunlukla hata ayıklama ifadelerinden oluşan) ayrıştırmak yerine, her bir ayrı dosyaya giriş yapan iki logger örneğine sahip olmak istiyorum; Biri analitik ve bir bütün amaçlı kayıt için. Bunun Logback veya bunun için herhangi bir başka kaydedici ile mümkün olup olmadığını bilen var mı?Farklı iletilerin iki dosyaya günlüğe kaydedilmesi için günlüğe kaydetme

cevap

223

Böyle bir şeyi, geri almada yapmak çok olasıdır. İşte bir örnek yapılandırma aşağıdaki gibidir: Sonra

<?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> 

kurulum ediyorum iki ayrı kaydediciler, her şey için ve biri şöyle analiz verilerini günlüğe:

benim durumumda
Logger analytics = LoggerFactory.getLogger("analytics"); 
+1

Ben no-satır besleme appender ve aynı dosyaya düzenli appender olabilir böylece bu tür şeyleri yapmak gerekir. Bu bilgi için teşekkürler. – djangofan

+0

IMO additivity = false farklı appender-ref belirtilmişse varsayılan olmalıdır. Bazı zamanlayıcı olaylarından dolayı bazı modüllerin çok sık log jeneratörler olacağı çok sık başvuruyor ve bu günlükleri farklı dosyalara ayırmak istiyoruz. Aynı günlüğün 10 farklı dosyada günlüğe kaydedilmesi gerçekten mantıklı değil. Yani varsayılan olarak bir özellik seçmeli olmalıdır. Geri dönüş bir yeniden yazım olduğundan aynı hata aynı yazar tarafından düzeltilmiş olmalıdır. –

+0

Sırasıyla farklı dosyalarda hata, hata ayıklama, bilgi mesajları kaydetmek istiyorum. Logback.xml – Qasim

1

Ben sınıf isimleri terk etmek istedim adı

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

log ve ben birkaç tür sınıfları vardı, bu yüzden benim logbook.xml

olarak
1

İstediğiniz kadar çok sayıda günlükleyiciniz olabilir. Ancak, farklı bir şekilde oturum açmanız için gereken her paket için daha iyisi vardır. Daha sonra bu paketdeki ve alt paketlerindeki tüm sınıflar o özel kaydediciyi alacaktır. Bunların hepsi kök kaydediciyi paylaşabilir ve günlük verilerini additive = "true" kullanarak root logger appender'a gönderebilir. İşte bir örnek:

<?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> 

İlgili konular