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}%nb。 在您各自的類中,在開始處理用戶請求之前,請將實際的用戶ID放在context(MDC)中。
MDC.put("user-id","SKRS786");C。 在處理結束時,從MDC中刪除上下文信息。
MDC.remove("user-id");資源:
- 登錄執行
- Log4J實施
使用MDC或NDC的哪一個?
NDC代表嵌套診斷上下文 。 它是附加上下文信息的基于堆棧的實現。 出于所有目的,請使用NDC之上的MDC,因為MDC可以提高內存效率。 有關詳細的比較, 請單擊此處 。
對于所有新的應用程序開發,請使用logback 。 logback是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中的有效日志记录–映射的诊断上下文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑屏幕防止从侧面偷窥贴什么膜(正面防窥
- 下一篇: 红绿灯时间设置标准(红绿灯时间设置标准是