Logback:如何在Web应用程序中为每个“用户”分隔日志?

时间:2012-10-04 09:03:46

标签: java logging logback

我必须为我们的Web应用程序的每个“用户”生成日志。为此,我们使用了SiftingAppender和Discriminator。

    <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>&lt;%d{yyyy-MM-dd HH:mm:ss}&gt; | %.-1level | %msg %throwable{5}%n</pattern>                    
                </encoder>
            </appender>
        </sift>
    </appender>

我们添加了一个servlet Web过滤器,以便将用户从会话添加到MDC,并在...之后将其删除。

但是,我们遇到了一些问题。我们有一些情况(为什么?)其中“userid”变量未定义,因此使用此名称显示日志:MYAPPLI_unknown_SEPARATED.log。

MDC是Web应用程序的单身人士吗? 或者是在范围会话中?

实际上,我必须生成2个日志/用户会话。所以我有第二个具有相同鉴别器的SiftingAppender,并且过滤器(Thresholdfilter)导致第二个日志应该与不同的跟踪级别相同。 是这样做的好方法吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

“嵌套诊断上下文”适用于这样的用例 - 您可以使用id标记每个日志语句以标识用户(如IP地址,用户名等)

有关详细信息,请参阅上一篇文章:

A different log for every user using Log4j