2013-02-25 22 views
6

我有了与阈值滤波一个appender一个的logback配置的日志级别:的logback - 重新映射为一个特定的记录

<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>INFO</level> 
    </filter> 
    ... 
</appender> 

这确保了只有信息和更高(警告,错误)获得记录到系统日志。但是,我们使用的第三方库之一是在DEBUG上记录特定事件,并且我想将此事件记录到syslog。我想到的第一种方法是尝试在记录器中重新映射日志级别,但不确定这是否可行?例如:

<logger name="akka.some.Thing" level="DEBUG" logAs="INFO"> 
    <appender-ref ref="SYSLOG" /> 
</logger> 

显然,“logAs”参数不存在,所以我不能这样做。将akka.some.Thing记录到SYSLOG appender,同时将过滤器留在其他记录器上的最佳方法是什么?

另一种方法是创建一个名为SYSLOG2的第二个appender,它没有适当的过滤器,并设置特定的记录器来使用它,但想知道是否有一种方法来配置只有1个SYSLOG appender的logback ...

感谢,

+0

为什么你有阈值过滤器?您的其他“记录器”配置是否会将高于INFO的等级发送给此appender?如果是这样,为什么? – 2013-02-25 19:36:45

+0

是的,我们登录到2个位置。系统日志appender结束于一个使用许可constaints的索引器,所以我们永远不想记录任何低于INFO的东西。但是,当我们想要调试时,我们启用调试,并且这将转到文件appender(没有syslog中的所有调试gunk)。 – Brett 2013-04-16 10:43:06

+1

有趣。如果你的环境允许的话,最简单的办法就是编写你自己的小型过滤器,可以拒绝任何有授权问题的东西。否则,更复杂的过滤器之一 - 允许表达式 - 可能有效,但第二个appender可能更容易理解和维护。 – 2013-04-16 14:54:57

回答

6

我知道这是一个古老的问题 - 但实际上可以通过单个SyslogAppender完成OP想要做的事情。

如果其他人正在搜索如何重新映射的示例,可以查看org.springframework.boot.logging.logback.LevelRemappingAppender类。 使用该appender,可以重新映射最终用于日志事件的appender,还可以重新映射用于最终日志事件的级别 - 例如,通过将DEBUG级别更改为INFO级别。在的logback配置文件

使用实例(从https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml拍摄):

<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender"> 
    <!-- Optional: specify the destination logger the event ends up in --> 
    <destinationLogger>org.springframework.boot</destinationLogger> 
    <!-- Optional: specify log level remapping --> 
    <remapLevels>INFO->DEBUG,ERROR->WARN</remapLevels> 
</appender> 

<logger name="org.thymeleaf" additivity="false"> 
    <appender-ref ref="DEBUG_LEVEL_REMAPPER"/> 
</logger> 

注意,重新映射到特定目的地的记录器可以使它很难找到原来的日志事件的源代码 - 因此与使用关心。

3

你可以做的,是写第二记录器+附加器具有相同的输出:

<appender name="SYSLOG-2" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>DEBUG</level> 
    </filter> 
    ... 
</appender> 

<logger name="akka.some.Thing" level="DEBUG"> 
    <appender-ref ref="SYSLOG-2" /> 
</logger> 

这将增加你的特定调试任务,以相同的输出。

+0

是的 - 这是我的想法 - “另一种方法是创建一个第二appender”根据我原来的帖子 - “但想知道是否有一种方法来配置logback只有一个appender”是难题。使用1 appender的唯一方法是编写一个自定义appender,我接受每个记录器的“重新映射”类型配置。 – Brett 2014-02-06 09:05:06

相关问题