我有一个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中,我有两个appender。如何根据测试或实时的MDC值告诉记录器选择正确的appender?
答案 0 :(得分:0)
在这里回答一个老问题,但这看起来像是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
的日志事件将通过Live.log
appender写入FILE-Live
,并且包含MDC值production=Test
的日志事件将写入{{ 1}}通过Test.log
appender。