【问题标题】:How to split logback logs based on "category"如何根据“类别”拆分 logback 日志
【发布时间】:2013-07-11 05:07:17
【问题描述】:

我有一个将请求路由到“实时”或“测试”系统的 servlet。

servlet 根据 URI 路径知道这一点。我想将日志写入两个单独的文件 1 用于实时测试。

所以我知道我需要使用 mdc

所以...

class MyServlet ... {
    Logger logger = LoggerFactory.getLogger("com.xxx.abc");

    HttpServletRequest(...)
    {
        if(path contains "live")
            MDC.put("production", "Live");
        else
            MDC.put("production", "Test");

        logger.info("Request processed...");
    }
}

在我的 logback.xml 中,我有两个附加程序。如何告诉 logger 根据 test 或 live 的 MDC 值选择正确的 appender?

【问题讨论】:

    标签: logging logback mdc


    【解决方案1】:

    在这里回答一个老问题,但这看起来是 Logback 的 SiftingAppender 的完美候选人。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <appender name="SIFTER" class="ch.qos.logback.classic.sift.SiftingAppender">
            <discriminator>
                <key>production</key>
                <defaultValue>unknown</defaultValue>
            </discriminator>
            <sift>
                <appender name="FILE-${production}" class="ch.qos.logback.core.FileAppender">
                    <file>${production}.log</file>
                    <layout class="ch.qos.logback.classic.PatternLayout">
                        <pattern>...</pattern>
                    </layout>
                </appender>
            </sift>
        </appender>
    
        <root level="ALL">
            <appender-ref ref="SIFTER" />
        </root>
    </configuration>
    

    production 的值将被替换为日志文件名。因此,包含 MDC 值production=Live 的日志事件将通过FILE-Live 附加程序写入Live.log,包含MDC 值production=Test 的日志事件将通过FILE-Test 附加程序写入Test.log

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 2015-06-03
      相关资源
      最近更新 更多