我遇到了一個(gè)我想理解的奇怪問題。如果有人有一個(gè)解決方案,那就太好了,但我實(shí)際上正在尋找理解為什么會(huì)發(fā)生這種情況:我編寫了一個(gè)自定義 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) 中的對(duì)象的類和靜態(tài)引用的對(duì)象的類 (2) 由不同的類加載器加載,如輸出所示:org.springframework.boot.devtools.restart.classloader.RestartClassLoader@618157b2sun.misc.Launcher$AppClassLoader@18b4aac2因此,我無法將對(duì)象轉(zhuǎn)換為所需的類型并訪問其方法。我想到的解決方法是通過Reflecion 訪問這些值,但我寧愿使用實(shí)際值。我想這只是我的開發(fā)環(huán)境的問題,但正如第一部分所述,我真的很想了解發(fā)生了什么。編輯:正如預(yù)期的那樣:當(dāng)在沒有 spring 開發(fā)工具的情況下以“生產(chǎn)”模式運(yùn)行應(yīng)用程序時(shí),所有類都由同一個(gè)類加載器加載。
1 回答

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