Java / JEE中的有效日志记录–映射的诊断上下文

当我和一位同事坐在一起解决一些应用程序问题时,一切都开始了,当时我注意到了一些有趣的事情。 他正在合并代码,我的眼睛吸引了此类“ org.apache.log4j.MDC”的注意。 这导致了以下发现:

什么是MDC?

MDC代表“ 映射诊断上下文” 。 它可以帮助您从多个来源中区分出交织日志。 让我详细解释。 当给定的servlet有多个用户请求时,将使用线程为用户的每个请求服务。 这使多个用户登录到相同的日志文件和日志
语句混杂在一起。 现在,要过滤出特定用户的日志,我们需要将用户ID附加到日志语句中,以便我们可以在日志文件中grep(search)它们,以使其具有某种意义。 一种明显的日志记录方式是在日志语句中附加用户ID,即log.info(userId +“ logged something”); 一种非侵入式的日志记录方式是使用MDC。 使用MDC,您可以将用户ID放在一个上下文映射中,该映射由记录器附加到(每个用户请求的)线程上。 MDC是线程安全的,并且在内部使用Map来存储上下文信息。[ 礼貌:Kalyan Dabburi ]

如何使用MDC?

一个。 配置信息,该信息需要作为ConversionPattern的一部分记录在log4j.xml中(在这种情况下为user-id)。

log4j.appender.consoleAppender.layout.ConversionPattern = %d %i - %m - %X{user-id}%n

b。 在您各自的类中,在开始处理用户请求之前,请将实际的用户ID放在context(MDC)中。

MDC.put("user-id","SKRS786");

C。 在处理结束时,从MDC中删除上下文信息。

MDC.remove("user-id");

资源:

使用MDC或NDC的哪一个?

NDC代表嵌套诊断上下文 。 它是附加上下文信息的基于堆栈的实现。 出于所有目的,请使用NDC之上的MDC,因为MDC可以提高内存效率。 有关详细的比较, 请单击此处

对于所有新的应用程序开发,请使用logbacklogback是SLF4J的运行时实现。 如果您具有Log4J的现有应用程序,那么仍然值得切换到logback 。 有关详细说明, 请单击此处 。 要了解Java和JEE世界中日志记录的发展,请参阅Micheal Andrews的这篇文章

参考: Bemused博客上的JCG合作伙伴 Srinivas Ovn提供的Java / JEE有效登录

翻译自: https://www.javacodegeeks.com/2013/01/effective-logging-in-javajee-mapped-diagnostic-context.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值