日期:2014-05-17  浏览次数:20798 次

怎么用logback实现每个用户登陆产生不同的日志(包括用户所属的组织)
本帖最后由 paincupid 于 2013-03-22 17:12:23 编辑
怎么用logback实现每个用户登陆产生不同的日志(包括用户所属的组织),每个用户登陆的日志外面建一个每个用户所属组织的文件夹?

比如在c:/log下,根据用户登陆的信息,生成
c:/log/组织部/<123456789><2013-02-22>.log
c:/log/宣传部/<213456789><2013-02-22>.log

如果在java类中用logback的
MDC.put("userid", "123456789");
MDC.put("departid", "组织部");

在logback.xml中

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %r, %ex, %F, %L, %C{1},
%M : %m%n</pattern>
</layout>
</appender>
<!-- 按用户输出日志 -->
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<Key>userid</Key>
<Key>departid</Key>
<DefaultValue>unknown</DefaultValue>
</discriminator>
<sift>
<appender name="FILE-${userid}" class="ch.qos.logback.core.FileAppender">
<File>log/${departid}/${userid}.log</File>
<Append>false</Append>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</Pattern>
</layout>
</appender>
</sift>
</appender>

<root level="ALL">
<appender-ref ref="STDOUT" />
<appender-ref ref="SIFT" />
</root>
</configuration>



但是,discriminator只能识别出一个key,貌似不支持多个key,怎么办呢?

有其它方法现实也行
logback用户日志?日志?自定义日志 logback 日志 自定义日志 分用户登陆日志

------解决方案--------------------
http://blog.csdn.net/liuhanfeng123/article/details/7660091
------解决方案--------------------
可以有两个discriminator吗

要知道这个,估计得好好看看使用手册了

http://logback.qos.ch/manual/index.html
------解决方案--------------------
MDC.put("userid", "组织部/123456789");
这样用一个Key就可以了.
------解决方案--------------------
另外根据你的需求,sift下的appender用ch.qos.logback.core.rolling.RollingFileAppender能达到按日期记日志的要求吧。