2010-03-21 50 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> 

相关问题