亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring Boot 和 Logback 中不同 Classloader 加載的類

Spring Boot 和 Logback 中不同 Classloader 加載的類

牧羊人nacy 2023-07-19 14:56:02
我遇到了一個我想理解的奇怪問題。如果有人有一個解決方案,那就太好了,但我實際上正在尋找理解為什么會發生這種情況:我編寫了一個自定義 Logback 布局。我正在擴展ch.qos.logback.contrib.json.classic.JsonLayout和覆蓋addCustomDataToJsonMap。如果在日志記錄事件參數列表中找到某種類型的參數,我想添加其他屬性:  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但是參數列表 (1) 中的對象的類和靜態引用的對象的類 (2) 由不同的類加載器加載,如輸出所示:org.springframework.boot.devtools.restart.classloader.RestartClassLoader@618157b2sun.misc.Launcher$AppClassLoader@18b4aac2因此,我無法將對象轉換為所需的類型并訪問其方法。我想到的解決方法是通過Reflecion 訪問這些值,但我寧愿使用實際值。我想這只是我的開發環境的問題,但正如第一部分所述,我真的很想了解發生了什么。編輯:正如預期的那樣:當在沒有 spring 開發工具的情況下以“生產”模式運行應用程序時,所有類都由同一個類加載器加載。
查看完整描述

1 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

我假設您正在使用 Spring DevTools。他們創建一個單獨的類加載器以更快地重新啟動應用程序。該類加載器應該加載您的類,并在重新啟動時被丟棄,而不是重新啟動整個應用程序。

您應該能夠將其配置為排除自定義 Logback 布局,以便在應用程序重新啟動時不會重新加載它(鏈接文檔中的第 20.2.6 節)。


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號