2010-03-21 58 views
108

我正在使用logback/slf4j來執行我的日誌記錄。我想解析我的日誌文件來分析一些數據,所以我不想分析一個偉大的大文件(主要由調試語句組成),而是希望有兩個記錄器實例,每個記錄器實例都記錄到一個單獨的文件中;一個用於分析,另一個用於所有目的日誌記錄。有誰知道這是可能的與Logback,或任何其他記錄器的事情?Logback將不同消息記錄到兩個文件

回答

223

在logback中這樣做很有可能。下面是一個例子配置:

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

,那麼你會設置兩個獨立的記錄器,一個用於一切,一個記錄分析數據,如下所示:

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

我需要做這樣的事情,這樣我可以有一個不需要行飼料添加器和常規的appender到同一個文件。感謝這個信息。 – djangofan 2013-01-16 17:31:17

+0

如果指定了不同的appender-ref,IMO additivity = false應爲默認值。很多時候我們會得到一些應用程序,其中一些模塊由於某些計時器事件而會非常頻繁地生成日誌,我們希望將這些日誌分成不同的文件。 在10個不同的文件中記錄相同的日誌確實沒有意義。所以它應該是一個非默認選項。 由於logback是一個重寫,同一個作者應該修正相同的錯誤。 – 2015-03-23 07:39:47

+0

我想分別在不同的文件中記錄錯誤,調試,信息消息。這是可能的與logback.xml – Qasim 2015-06-07 14:20:37

1
在我的情況

我想離開的類名作爲登錄名

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

和我有一些這樣的課程,所以我logbook.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> 
1

您可以擁有任意數量的記錄器。但是,對於每個需要以不同方式記錄的軟件包,最好有一個。然後,該軟件包及其子包中的所有類都將獲得該特定的記錄器。他們都可以共享根記錄器,並使用additivity =「true」將其日誌數據發送到根記錄器appender。這裏有一個例子:

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

相關問題