Java / JEE中的有效日志记录–映射的诊断上下文
當(dāng)我和一位同事坐在一起解決一些應(yīng)用程序問(wèn)題時(shí),一切都開(kāi)始了,當(dāng)時(shí)我注意到了一些有趣的事情。 他正在合并代碼,我的眼睛吸引了此類“ org.apache.log4j.MDC”的注意。 這導(dǎo)致了以下發(fā)現(xiàn):
什么是MDC?
MDC代表“ 映射診斷上下文” 。 它可以幫助您從多個(gè)來(lái)源中區(qū)分出交織日志。 讓我詳細(xì)解釋。 當(dāng)給定的servlet有多個(gè)用戶請(qǐng)求時(shí),將使用線程為用戶的每個(gè)請(qǐng)求服務(wù)。 這使多個(gè)用戶登錄到相同的日志文件和日志
語(yǔ)句混雜在一起。 現(xiàn)在,要過(guò)濾出特定用戶的日志,我們需要將用戶ID附加到日志語(yǔ)句中,以便我們可以在日志文件中g(shù)rep(search)它們,以使其具有某種意義。 一種明顯的日志記錄方式是在日志語(yǔ)句中附加用戶ID,即log.info(userId +“ logged something”); 一種非侵入式的日志記錄方式是使用MDC。 使用MDC,您可以將用戶ID放在一個(gè)上下文映射中,該映射由記錄器附加到(每個(gè)用戶請(qǐng)求的)線程上。 MDC是線程安全的,并且在內(nèi)部使用Map來(lái)存儲(chǔ)上下文信息。[ 禮貌:Kalyan Dabburi ]
如何使用MDC?
一個(gè)。 配置信息,該信息需要作為ConversionPattern的一部分記錄在log4j.xml中(在這種情況下為user-id)。
log4j.appender.consoleAppender.layout.ConversionPattern = %d %i - %m - %X{user-id}%nb。 在您各自的類中,在開(kāi)始處理用戶請(qǐng)求之前,請(qǐng)將實(shí)際的用戶ID放在context(MDC)中。
MDC.put("user-id","SKRS786");C。 在處理結(jié)束時(shí),從MDC中刪除上下文信息。
MDC.remove("user-id");資源:
- 登錄執(zhí)行
- Log4J實(shí)施
使用MDC或NDC的哪一個(gè)?
NDC代表嵌套診斷上下文 。 它是附加上下文信息的基于堆棧的實(shí)現(xiàn)。 出于所有目的,請(qǐng)使用NDC之上的MDC,因?yàn)镸DC可以提高內(nèi)存效率。 有關(guān)詳細(xì)的比較, 請(qǐng)單擊此處 。
對(duì)于所有新的應(yīng)用程序開(kāi)發(fā),請(qǐng)使用logback 。 logback是SLF4J的運(yùn)行時(shí)實(shí)現(xiàn)。 如果您具有Log4J的現(xiàn)有應(yīng)用程序,那么仍然值得切換到logback 。 有關(guān)詳細(xì)說(shuō)明, 請(qǐng)單擊此處 。 要了解Java和JEE世界中日志記錄的發(fā)展,請(qǐng)參閱Micheal Andrews的這篇文章 。
參考: Bemused博客上的JCG合作伙伴 Srinivas Ovn提供的Java / JEE有效登錄 。
翻譯自: https://www.javacodegeeks.com/2013/01/effective-logging-in-javajee-mapped-diagnostic-context.html
總結(jié)
以上是生活随笔為你收集整理的Java / JEE中的有效日志记录–映射的诊断上下文的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑屏幕防止从侧面偷窥贴什么膜(正面防窥
- 下一篇: 具有Aspects的Java中的Mixi