簡體   English   中英

SLF4J在不同的附加程序中以不同級別記錄相同的類

[英]SLF4J log same class at different levels in different appenders

我有兩個附加程序,在這種情況下,是控制台附加程序和滾動文件附加程序。 對於某個類的日志輸出(在本例中為com.google.api.client.http.HttpTransport ),如何讓該類在一個附加程序中以DEBUG級別登錄,在另一個附加程序中以WARN級別登錄?

這似乎不是一件很復雜的事情,但是不幸的是,這似乎完全超出了我可以找到示例的典型用例。 我並不想避免編寫自己的Filter,但是如果這確實是答案,我會感到驚訝。

我正在使用Spring Boot,如果那很重要,我更喜歡使用JavaConfig。

感謝大家的回應! 我很高興通過閱讀有關“正確”方法的意見來了解更多信息,請在繼續之前檢查您是否首先回答了原始問題:)

您可以使用Logback的ThresholdFilter來過濾附加器收到的事件,並且可以將這些過濾的附加器與此類com.google.api.client.http.HttpTransport記錄器相關聯。

您的問題指出:

我正在使用Spring Boot,如果那很重要,我更喜歡使用JavaConfig。

因此,我假設您正在以編程方式創建追加程序。 您可以創建ThresholdFilter並將其與附加程序關聯,如下所示:

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);
...

然后,您需要將這些附加程序與特定的記錄器相關聯,如下所示:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM