在spring boot應用中,MDC相關的內容能否在tomcat的訪問日志中得到體現。
我看了很多博客,但是到處都是MDC的內容被記錄在應用程式的日志中,而不是訪問日志中。
有什么方法可以將它們添加到Tomcat訪問日志模式中嗎?
uj5u.com熱心網友回復:
最后的結論是。訪問日志按日期不支持MDC。
在github上發現了這個,它提供了一個變通的方法來為訪問日志啟用MDC。
https://github.com/dropwizard/dropwizard/issues/2419
其中有一個jira鏈接,詳細介紹了該解決方案。
uj5u.com熱心網友回復:
正如Tomcat的檔案中所解釋的那樣,AccessLogValve沒有使用任何傳統的日志框架:
這個Valve使用獨立的邏輯來撰寫它的日志檔案,它可以在每天的午夜自動滾動。(訪問日志的基本要求是以低開銷處理大量連續的資料流)。這個Valve不使用Apache Commons Logging,從而避免了額外的開銷和潛在的復雜配置)。
格式化邏輯在AbstractAccessLogValve類中,而寫入實際日志檔案的邏輯在AccessLogValve。
該格式化模式使用簡單的%c和%{param}c AccessLogElements(其中c是任何字符,param是一個字串),可以很容易地擴展您的目的。例如,你可以添加一個元素%{key}M,回傳與鍵key相關的MDC值:
import org.slf4j.MDC;
public class MDCAccessLogValve extends AccessLogValve {
@Override
protected AccessLogElement createAccessLogElement(String name, char pattern) {
if (pattern == 'M'/span>) {
return new AccessLogElement(){
@Override
public void addElement(CharArrayWriter buf, Date date, Request request, Response response, long time) /span> {
buf.append(MDC.get(name))。
}
};
}
return super.createAccessLogElement(name, pattern)。
}
如果你想在Spring Boot中使用這個閥門而不是標準閥門,你可以在WebServerFactoryCustomizer中添加這個閥門:
@Bean
public WebServerFactoryCustomizer<ConfigurableTomcatWebServerFactory> accessLogCustomizer(Env) {
return new WebServerFactoryCustomizer<ConfigurableTomcatWebServerFactory>(){
@Override
public void customize(ConfigurableTomcatWebServerFactory factory) {
final MDCAccessLogValve valve = new MDCAccessLogValve()。
valve.setPattern(env.getProperty("server.tomcat.accesslog.pattern", "common") 。)
factory.addEngineValves(valve)。
}
};
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/319417.html
標籤:
上一篇:gganimation:將小節逐一影片化,并將先前顯示的小節進行retatin。
下一篇:我在使用JakartaEE,做了一個"helloworld"的restfulAPI,無法通過訪問URL獲得回傳字串。
