我必须为我们 Web 应用程序的每个“用户”生成日志。为此,我们使用了带有鉴别器的 SiftingAppender。
<appender name="SEPARATED" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>userid</key>
<defaultValue>unknown</defaultValue>
</discriminator>
<sift>
<appender name="MYAPPLI_${userid}_SEPARATED" class="ch.qos.logback.core.FileAppender">
<file>${LOG}/MYAPPLI/MYAPPLI_${userid}_SEPARATED.log</file>
<append>true</append>
<encoder>
<pattern><%d{yyyy-MM-dd HH:mm:ss}> | %.-1level | %msg %throwable{5}%n</pattern>
</encoder>
</appender>
</sift>
</appender>
我们添加了一个 servlet Web 过滤器,以便将会话中的用户添加到 MDC,并在...之后将其删除。
但是,我们有一些问题。我们有一些情况(为什么?)其中“userid”变量未定义,因此日志以这个名称出现:MYAPPLI_unknown_SEPARATED.log。
MDC 是 Web 应用程序的单例吗?还是在范围会话中?
实际上,我必须生成 2 个日志/用户会话。所以我有第二个具有相同鉴别器的 SiftingAppender 和一个过滤器(阈值过滤器),导致第二个日志应该与不同级别的跟踪相同。这是这样做的好方法吗?
谢谢你。