MDC的概念:Manufacturing Data Collection 生产数据实时采集和分析。
有时实际开发过程没有发现的BUG在生产环境才出现,需要到生产环境去分析实时日志来进行BUG跟踪;LOG4J2提供了MDC功能可以将特定用户的日志单独处理输出到特定的文件中。
配置关键字ThreadContext ,DynamicThresholdFilter ,ThreadContextMapFilter
1.DynamicThresholdFilter 从整体上控制日志默认输出级别,对于特定的值可以调整日志级别
<!--ThreadContext.put("loginId", "User1"); 除了User1之外其他的日志都默认是ERROR级别,USER1相关的日志是DEBUG级别 -->
<DynamicThresholdFilter key="loginId"
defaultThreshold="ERROR" onMatch="ACCEPT" onMismatch="DENY">
<KeyValuePair key="User1" value="DEBUG" />
</DynamicThresholdFilter>
2.ThreadContextMapFilter 控制文件的记录内容,符合条件才记录到文件,其他都拒绝写入日志
<!-- 我只记录USER1的日志信息,找生产环境BUG用的。 -->
<File name="testUserLog" fileName="target/testUserLog2" append="true">
<ThreadContextMapFilter onMatch="ACCEPT"
onMismatch="DENY">
<KeyValuePair key="loginId" value="User1" />
</ThreadContextMapFilter>
<PatternLayout pattern="%n%t %-5p %c{2} MDC%X - %m" />
</File>
3.在WEB应用中可以在过滤器filter中加入以下代码:
ThreadContext.put("loginId",Session.getAttribute("userId")); //userId代表的就是登陆会话的工号信息
如果是APP,可以使用代理模式(如果用SPRING,可以使用aop,如果没有SPRING,可以使用CGLIB或者其他)来实现
代码工程基于MAVEN,资源下载地址:http://note.youdao.com/share/?id=75707f4ae039b0d1e2f2cf46c8342d34&type=note
相关文章
- 大数据技术 - MapReduce 应用的配置和单元测试
- 问题导出iOS应用程序(添加二进制文件未使用正确的配置文件)
- 我可以使用开发证书和adhoc分发配置文件将我的应用程序分发给特定用户吗?
- zookeeper应用——集中配置管理系统的实现
- 在rails中存储应用程序特定配置的最佳方法是什么?
- 关于WinForm中的应用配置文件的使用
- Java应用程序配置文件的最佳实践是什么?
- .NET中应用Ueditor(富文本编辑)的配置和使用
- centos7+apache+svn配置 踩坑,注意权限问题。apache应用目录checkout应用 必须用这个命令:svn co file:///home/svn/test/ test ,通过svn add * &&commit 及任意修改都是不行的
- Log4j、Log4j2的日志输出级别和配置文件详解