2015-05-21 28 views
5

Logback özelliğini kullanma Her zaman bir eşzamansız iş başladığında yeni günlük başlatmak istiyorum, bu yüzden rollover'ı elle çağırmam gerekiyor. Ama ekleyiciyi almaya çalıştığımda bunun yerine boş olurum.logback elle döndürme rollover'ı döndürme

ch.qos.logback.classic.Logger logF = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.my.com.pany"); 
     RollingFileAppender<ILoggingEvent> appender = (RollingFileAppender<ILoggingEvent>) logF.getAppender("test"); 
     appender.rollover(); 

i zaman uyumsuz işi tetikleyebilir zaman çok benim günlük başlayacağını TimeBasedRollingPolicy<E> uzatıldı:

@NoAutoStart 
public class ManualRollingPolicy<E> extends TimeBasedRollingPolicy<E> { 
} 

somone yardımcı olabilir

<configuration scan="true"> 
    <timestamp key="time" datePattern="yyyy-MM-dd_HH_mm"/> 
    <logger name="com.my.com.pany" level="DEBUG"> 
     <appender name="TEST" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>logs/log_TEST_${time}.log</file> 
      <triggeringPolicy 
        class="com.my.com.pany.myapp.logging.ManualRollingPolicy"> 
      </triggeringPolicy> 
      <append>true</append> 
      <encoder> 
       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
      </encoder> 
     </appender> 
    </logger> 
</configuration> 

böyle aktarma diyoruz: Aşağıda benim yapılandırma olduğunu bu konuda benimle DÜZENLEME: Bazı daha fazla soruşturma üzerine LogF'un appenderList boyutuna sahip olduğunu ve özel RollingPolicy düzgün ayarlanmış olduğunu görebiliyorum. Ancak, bu ekleyicinin name özelliği null olarak ayarlanmış ve bu yüzden isim alamıyorum nedeni olduğunu düşünüyorum.

cevap

5

Bu yüzden, birinin yararlı bulabileceğini düşündüğüm oldukça düzgün bir çözümüm var. SiftingAppender'u kullanabilirsiniz. "Adından da anlaşılacağı gibi, bir SiftingAppender, belirli bir çalışma zamanı özniteliğine göre günlüğe kaydetme (veya eleme) için kullanılabilir"

Bu yüzden ekleyicinizi toplu iş başlangıcında bazı benzersiz parametreler alacak şekilde yapılandırırsınız:

<appender name="FULL" class="ch.qos.logback.classic.sift.SiftingAppender"> 
     <discriminator> 
      <key>id</key> 
      <defaultValue>000000</defaultValue> 
     </discriminator> 

     <sift> 
      <appender name="FULL-${id}" class="ch.qos.logback.core.FileAppender"> 
       <file>logs/log_${id}.log</file> 
       <append>false</append> 
       <layout class="ch.qos.logback.classic.PatternLayout"> 
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
       </layout> 
      </appender> 
     </sift> 
    </appender> 

ve sonra elle çağırır: logger.info(ClassicConstants.FINALIZE_SESSION_MARKER): yeni günlüğü başlatmak ve bu paticular günlük dosyası ile bittiğinde sadece bir FINALIZE_SESSION_MARKER sabit giriş yapmak için MDC.put("id",id);. Benim düşünceme göre, esnek rollover sorusunu cevaplayacak kadar esnektir.

2

Nihayet bu Programı nasıl yapabileceğinizi anladım. Başka birinin bu soru üzerine gelmesi durumunda.

manuel aktarma:

aşağıdaki
public static void manuallyRolloverLog() { 
    ch.qos.logback.classic.Logger log = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(MainActivity.class); 
    RollingFileAppender file = (RollingFileAppender) log.getAppender("FILE"); 
    file.rollover(); 
} 

i kullanılan XML Yapılandırma gibidir:

<configuration> 
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>AppLog.log</file> 

    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
     <fileNamePattern>AppLog.%i.log.zip</fileNamePattern> 
     <minIndex>1</minIndex> 
     <maxIndex>3</maxIndex> 
    </rollingPolicy> 

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <maxFileSize>5MB</maxFileSize> 
    </triggeringPolicy> 
    <encoder> 
     <pattern>%d %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
</appender> 

<root level="DEBUG"> 
    <appender-ref ref="FILE" /> 
</root> 

Bu SizeBased haddeleme yapmak ve elle talep üzerine rollover sağlayacak .

İlgili konular