SLF4J在不同的appender中记录不同级别的同一个班级

By simon at 2018-02-07 • 0人收藏 • 30人看过

我有两个appender,在这种情况下,一个控制台appender和一个滚动文件 附加目的地。对于某个类的日志输出(在这种情况下,com.google.api.client.http.HttpTransport),我该怎么做 在一个appender和WARN得到这个类在DEBUG级别登录 在另一个追加水平呃? 这似乎不是一个非常复杂的事情要问,但不幸的是 似乎完全超出了典型的使用情况I可以找到例子。我不是 试图避免编码我自己的过滤器,但如果真的那么我会感到惊讶 这里的答案。 我如果使用Spring Boot,我更喜欢使用JavaConfig。 感谢大家的回应!我非常高兴o通过学习更多 阅读“正确”的方法来做到这一点,请检查你是否第一次 回答了最初的问题befo再继续:)

1 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

你可以使用Logback的ThresholdFilter来过滤一个接收到的事件 appender,你可以关联这些过滤的appender with记录器为此 班级:com.google.api.client.http.HttpTransport。 你的问题指出:

我正在使用Spring Boot,而且我更喜欢使用JavaConfig在事情上。 所以,我假设你正在以编程方式创建appender。你可以创建一个 ThresholdFilter并将其与之关联一个像这样的appender:

ConsoleAppender consoleAppender = new ConsoleAppender();
ThresholdFilter debugFilter = new ThresholdFilter();
debugFilter.setLevel("DEBUG");
consoleAppender.addFilter(debugFilter);
...

FileAppender<ILoggingEvent> fileAppender = new FileAppender<>();
ThresholdFilter warnFilter = new ThresholdFilter();
warnFilter.setLevel("WARN");
fileAppender.addFilter(warnFilter);
...
然后您需要将这些appender与特定的记录器相关联 所以:
Logger logger = (Logger) LoggerFactory.getLogger("com.google.api.client.http.HttpTransport");
logger.addAppender(fileAppender);
logger.addAppender(consoleAppender);
以下是使用XML配置的相同方法:
<appender name="DEBUG_STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- only accept DEBUG log events -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
    </filter>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>...</pattern>
    </encoder>
</appender>

<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- only accept WARN log events -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>...</fileNamePattern>
    </rollingPolicy>

    <encoder>
        <pattern>...</pattern>
    </encoder>
</appender>

<!-- associate this logger instance with the two appenders -->
<logger name="com.google.api.client.http.HttpTransport">
    <appender-ref ref="DEBUG_STDOUT"/>
    <appender-ref ref="WARN_FILE"/>
</logger>

登录后方可回帖

Loading...