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");

资源:

  • 登录执行
  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bzoj1049[HAOI2006]数字序列

1049: [HAOI2006]数字序列 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1813 Solved: 789[Submit][Status][Discuss]Description 现在我们有一个长度为n的整数序列A。但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列。但是不希望改变过多的数&…

具有Aspects的Java中的Mixin –用于Scala特性示例

Scala特征允许将新行为混合到一个类中。 考虑两个特征,可以向JPA实体添加审核和与版本相关的字段: package mvcsample.domainimport javax.persistence.Version import scala.reflect.BeanProperty import java.util.Datetrait Versionable {VersionBea…

前端:HTML

1,web服务的本质 import socketsk socket.socket()sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr sk.accept()data conn.recv(8096)conn.send(b"HTTP/1.1 200 OK\r\n\r\n")conn.secd(b"<h1>Hello world!</h1>"…

动态规划:从新手到专家

作者&#xff1a;Hawstein出处&#xff1a;http://hawstein.com/posts/dp-novice-to-advanced.html前言 本文翻译自TopCoder上的一篇文章&#xff1a; Dynamic Programming: From novice to advanced &#xff0c;并非严格逐字逐句翻译&#xff0c;其中加入了自己的一些理解。水…

小程序 foreach_【第2106期】小程序依赖分析实践

前言这种可视化分析图还是很直观的&#xff0c;很有趣。今日早读文章由自然醒授权分享。正文从这开始~~用过 webpack 的同学肯定知道 webpack-bundle-analyzer &#xff0c;可以用来分析当前项目 js 文件的依赖关系。webpack-bundle-analyzer因为最近一直在做小程序业务&#x…

python----模块

collections---------------------------------------->扩展数据类型 re-------------------------------------------------->正则相关操作&#xff0c;正则 匹配字符串 time----------------------------------------------->时间相关 三种格式&#xff1a;时间戳&…

在MySQL数据库上使用Quartz Scheduler入门

这是一些简单的步骤&#xff0c;可帮助您使用Groovy在MySQL数据库上完全入门Quartz Scheduler。 以下脚本可让您使用外部文件快速尝试不同的Quartz配置设置。 第一步是使用表设置数据库。 假设您已经安装了MySQL&#xff0c;并且有权创建数据库和表。 bash> mysql -u root …

一招搞定css页面布局

如何做出漂亮的页面&#xff1a; 1、 多写页面&#xff0c;多改。 2、 多写页面&#xff0c;多改。 3、 多写页面&#xff0c;多改。 大致的思想步骤&#xff1a; 写页面的时候先规划好大致的分块&#xff0c;无论是用定位或者浮动&#xff0c;首先要确定要应用的场景&#xf…

mysql blob取值_MySQL 数据类型:

MySQL 数据类型&#xff1a;字符型数值型日期时间型内建类型字符型&#xff1a;CHAR, BINARY&#xff1a;定长数据类型&#xff1b;VARCHAR, VARBINARY&#xff1a;变长数据类型&#xff1b;需要结束符&#xff1b;TEXT&#xff1a;TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXTBLOB: …

MySQL 中的三中循环 while loop repeat 的基本用法

-- MySQL中的三中循环 while 、 loop 、repeat 求 1-n 的和-- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法&#xff1a; while 条件 DO循环体; end while; */ -- 实例&#xff1a; create procedure sum1(a int) begindeclare sum int default 0; -- default 是指…

css渲染(二) 文本

一、文本样式 首行缩进  text-indent 首行缩进是将段落的第一行缩进&#xff0c;这是常用的文本格式化效果。一般地&#xff0c;中文写作时开头空两格。[注意]该属性可以为负值&#xff1b;应用于: 块级元素(包括block和inline-block)  <div><p style"text-in…

RTKLIB的主要功能

RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包&#xff0c;RTKLIB由日本东京海洋大学&#xff08;Tokyo University of Marine Science and Technology&#xff09;的高须知二&#xff08;Tomoji Takasu&#xff09;开发。R…

28岁学python转行_28岁转行程序员,学Java还是Python?码农:想快点月薪过万就选它...

为什么要学Java&#xff1f;Python给人的印象简单是因为我们在用Python的时候&#xff0c;可以直接调用别人已经写好的代码接口就可以&#xff0c;相对于傻瓜模式&#xff0c;Java的许多处理都要原生很多&#xff0c;写的代码可能会多一些&#xff0c;但一旦完成封装&#xff0…

使用SSL和Spring Security保护Tomcat应用程序的安全

如果您看过我的上一个博客&#xff0c;您会知道我列出了Spring Security可以做的十件事 。 但是&#xff0c;在认真开始使用Spring Security之前&#xff0c;您真正要做的第一件事就是确保您的Web应用使用正确的传输协议&#xff0c;在这种情况下为HTTPS –毕竟&#xff0c;没有…

模块 hashlib模块

hashlib模块 提供摘要算法 主要做对比&#xff0c;比较两段代码是否完全一致 不管算法多么不同&#xff0c;摘要功能始终不变&#xff0c; 对同一个字符串进项同一算法摘要得到的值始终不变 MD5值的生成 import hashlib sha1 hashlib.md5() #一定加括号 sha1.update(bytes(a…

css渲染(一) 字体

一、字体属性 1.默认字体系列 chrome/opera:"宋体" firefox:"微软雅黑" safari/IE:Times,"宋体" 2.字体属性 字体类型 font-family  初始化时定义字体类型&#xff0c;如宋体 font-family: arial&#xff0c;“宋体”,“微软雅黑”;   /…

使用SynchronousQueue实现生产者/消费者

Java提供了许多用于并发支持的有用类中&#xff0c;有一个我想谈一谈&#xff1a; SynchronousQueue 。 特别是&#xff0c;我想通过使用方便的SynchronousQueue作为交换机制来完成Producer / Consumer实现。 除非我们了解SynchronousQueue实现的内幕&#xff0c;否则可能不清…

python含多个附件的邮件_Python发送带有多个图像附件的电子邮件

我试图用Python发送一封带有多个图像附件的电子邮件。但是通过下面的代码&#xff0c;我可以在正文中包含第一个图像&#xff0c;但是第二个图像会作为附件附加到电子邮件中。有没有办法可以在HTML的主体中同时获得这两个图像&#xff1f;下面是我当前的代码。在from email.mim…

Oracle存储过程总结

1.存储过程结构 ":"是赋值语句 如: l_name :sky;..."" 是判断是否相等. 如: if 11 then...":" 是变量绑定 如: if :P_NAME sky then... 1.1 第一个存储过程 create or replace procedure proc1( para1 varchar2, para2 out varchar2, para3 in…

图表测试点

测试点1&#xff0c;默认状态下&#xff0c;时间和时间插件还有图表显示一致2&#xff0c;看各种表&#xff08;折线图&#xff0c;柱状图&#xff0c;等&#xff09;与下表格显示一致3&#xff0c;数据库里的与页面上的数据位置显示的数据一致&#xff0c;点击页面 默认的折线…