怎么用logback实现每个用户登陆产生不同的日志(包括用户所属的组织)

arthur.dy.lee 2013-03-22 05:03:24
怎么用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,怎么办呢?

有其它方法现实也行
...全文
942 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaDocker 2015-03-30
  • 打赏
  • 举报
回复
<!-- 按照登录用户的userIdsheng --> <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator> <Key>userId</Key> <DefaultValue>unknown</DefaultValue> </discriminator> <sift> <appender name="FILE-${userId}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>F:/log-sys/${userId}/%d{yyyyMMdd}.log</fileNamePattern> <maxFileSize>20MB</maxFileSize> </rollingPolicy> <Append>false</Append> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> </sift> </appender>
arthur.dy.lee 2013-12-09
  • 打赏
  • 举报
回复
这个问题,偶已解决了,要改一个源代码即可。 以下方案仅供参考: 修改:ch\qos\logback\core\rolling下的TimeBasedRollingPolicy.java文件。

if (fileNamePatternStr != null) {
    	if(MDC.get("userid")!=null){
    		if(fileNamePatternStr.contains(MDC.get("userid"))){
    			fileNamePatternStr = 
    					fileNamePatternStr.replaceFirst(MDC.get("userid"), MDC.get("departName")+"/"+MDC.get("userid"));
    		}
    	}
配置的时候,也要用RollingFileAppender这个哦,具体的东西自己查吧。 第二个解决方案,你也可以自己写个Appender.
inrunlxf 2013-04-11
  • 打赏
  • 举报
回复
另外根据你的需求,sift下的appender用ch.qos.logback.core.rolling.RollingFileAppender能达到按日期记日志的要求吧。
inrunlxf 2013-04-11
  • 打赏
  • 举报
回复
MDC.put("userid", "组织部/123456789"); 这样用一个Key就可以了.
arthur.dy.lee 2013-03-28
  • 打赏
  • 举报
回复
引用 6 楼 dracularking 的回复:
可以有两个discriminator吗 要知道这个,估计得好好看看使用手册了 http://logback.qos.ch/manual/index.html
使用手册中没有!这个早查过了!!
arthur.dy.lee 2013-03-25
  • 打赏
  • 举报
回复
没有人知道么?
dracularking 2013-03-25
  • 打赏
  • 举报
回复
可以有两个discriminator吗 要知道这个,估计得好好看看使用手册了 http://logback.qos.ch/manual/index.html
arthur.dy.lee 2013-03-23
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
http://blog.csdn.net/liuhanfeng123/article/details/7660091
这个不对 只是根据日期生成了而已,并不能加组织和登陆人id
  • 打赏
  • 举报
回复
http://blog.csdn.net/liuhanfeng123/article/details/7660091
arthur.dy.lee 2013-03-23
  • 打赏
  • 举报
回复
自己顶一下 有知道的人么?
arthur.dy.lee 2013-03-22
  • 打赏
  • 举报
回复
自己顶一下 有知道的人么?

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧