我遇到了一個我想理解的奇怪問題。如果有人有一個解決方案,那就太好了,但我實際上正在尋找理解為什么會發(fā)生這種情況:我編寫了一個自定義 Logback 布局。我正在擴(kuò)展ch.qos.logback.contrib.json.classic.JsonLayout和覆蓋addCustomDataToJsonMap。如果在日志記錄事件參數(shù)列表中找到某種類型的參數(shù),我想添加其他屬性: protected void addCustomDataToJsonMap(Map<String, Object> map, ILoggingEvent event) { if (event.getArgumentArray() == null) { return; } for (Object argument : event.getArgumentArray()) { System.out.println(argument.getClass().getClassLoader()); // 1 System.out.println(JsonAttribute.class.getClassLoader()); // 2但是參數(shù)列表 (1) 中的對象的類和靜態(tài)引用的對象的類 (2) 由不同的類加載器加載,如輸出所示:org.springframework.boot.devtools.restart.classloader.RestartClassLoader@618157b2sun.misc.Launcher$AppClassLoader@18b4aac2因此,我無法將對象轉(zhuǎn)換為所需的類型并訪問其方法。我想到的解決方法是通過Reflecion 訪問這些值,但我寧愿使用實際值。我想這只是我的開發(fā)環(huán)境的問題,但正如第一部分所述,我真的很想了解發(fā)生了什么。編輯:正如預(yù)期的那樣:當(dāng)在沒有 spring 開發(fā)工具的情況下以“生產(chǎn)”模式運(yùn)行應(yīng)用程序時,所有類都由同一個類加載器加載。
1 回答

九州編程
TA貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊
我假設(shè)您正在使用 Spring DevTools。他們創(chuàng)建一個單獨(dú)的類加載器以更快地重新啟動應(yīng)用程序。該類加載器應(yīng)該加載您的類,并在重新啟動時被丟棄,而不是重新啟動整個應(yīng)用程序。
您應(yīng)該能夠?qū)⑵渑渲脼榕懦远x Logback 布局,以便在應(yīng)用程序重新啟動時不會重新加載它(鏈接文檔中的第 20.2.6 節(jié))。
添加回答
舉報
0/150
提交
取消