当我和一位同事坐在一起解决一些应用程序问题时,一切都开始了,当时我注意到了一些有趣的事情。 他正在合并代码,我的眼睛吸引了此类“ 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");

资源:

  • 登录执行
  • Log4J实施

使用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

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

  1. java jee curd_Java / JEE中的有效日志记录–映射的诊断上下文

    java jee curd 这一切始于当我和一位同事坐在一起解决一些应用程序问题时,当我注意到一些有趣的事情时. 他正在合并代码,我的眼睛吸引了此类" org.apache.log4j.MD ...

  2. 如何在ASP.NET Core中编写自定义日志记录提供程序

    目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...

  3. SLF4j使用、统一系统中所有的日志记录到slf4j

    SLF4j使用 在系统中使用SLF4j 开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法:给系统导入slf4的jar和logback的实现jar import ...

  4. java emr_java – EMR – 在Hadoop(和YARN)中使用自定义日志记录appender

    在我们的EMR集群中,我们使用自定义log4j-appender和log4j.properties来允许我们将日志转发到Splunk并让我们做一些魔术,提供的库和配置不知道如何操作. 在EMR 3.x ...

  5. android 崩溃日志捕获,安卓Java崩溃的捕获和日志记录

    Android的两种崩溃 Android 崩溃分为 Java 崩溃和 Native崩溃两种. Java崩溃的知识点 Java崩溃.png Java崩溃的原因 简单来说,Java崩溃就是在Java代码中 ...

  6. 在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!

    作者:琴水玉 cnblogs.com/lovesqcc/p/4319594.html 在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导.但是在实际中打的错误日志内容和格式变化 ...

  7. 请不要在Java项目中乱打印日志了,这才是正确姿势,非常实用!

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  8. error 系统错误 错误码10007_在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!...

    作者:琴水玉 cnblogs.com/lovesqcc/p/4319594.html 在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导. 但是在实际中打的错误日志内容和格式变 ...

  9. 在 Java 项目中打印错误日志的正确姿势,排查问题更方便,非常实用!

    在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导.但是在实际中打的错误日志内容和格式变化多样,错误提示上可能残缺不全.没有相关背景.不明其义,使得排查解决问题成为非常不方便或 ...

最新文章

  1. 微信公众号开发 微信消息回复开发 文本消息 图片消息开发
  2. java List集合中contains方法总是返回false
  3. 如何限制HTML5“数字”元素中的可能输入?
  4. ubuntu mysql 安装
  5. Maven引入外部jar的几种方法
  6. 【开发工具之Spring Tool Suite】6、用Spring Tool Suite简化你的开发
  7. 现实世界的Windows Azure 视频:新南威尔士州教育部(DET)利用Windows Azure实现在线科学测验...
  8. 我见过太多PhD,精神崩溃、心态失衡、身体垮掉、一事无成
  9. markdown 本地链接_Markdown的使用
  10. 结构体数组(C++)
  11. 旺旺上显示已上传服务器,在服务器上排除问题的头五分钟 | 旺旺知识库
  12. pythonlist反转_Python 列表反转显示的四种方法
  13. 工具系列————linux系统中安装fortran编译器(ifort)
  14. gmail无法登陆的解决!!
  15. 【观察】从拥抱变化到韧性成长,联想凌拓三年“三级跳”
  16. RedHat上安装openssl
  17. matplotlib中的imshow()绘图长宽比例失调,调整长宽比(备忘)
  18. iOS崩溃日志符号化及NLP聚类实现
  19. 机器学习算法各个击破
  20. Python实现圣诞树、打包exe过程和遇到的问题

热门文章

  1. c++ 凸包 分治算法_三维凸包
  2. 本地方法(JNI)——编码签名
  3. mybatis-spring 入门到实例
  4. mongodb json_在MongoDB和Spring Batch中将XML转换为JSON和原始使用
  5. 2015年传智播客java_2015年Java 8强势开始
  6. openshift_OpenShift上具有NetBeans的Java EE
  7. Java / Spring:如何快速生成整个Swagger记录的CRUD REST API
  8. junit编写测试代码_编写数据访问代码测试-不测试框架
  9. 模拟用户输入并检查输出的简单方法
  10. [JDK 11] jcmd中的类加载器层次结构详细信息