簡體   English   中英

如何將 Logback 附加到 smartfox 服務器

[英]How To attach Logback to smartfox server

如何將logback附加到smartfox服務器?

smartfox默認使用 log4j。 如何將我的擴展/所有 smartfox 的日志記錄轉移到logback

我試過這個,但是這個錯誤失敗了,因為我猜它已經到了log4j。

SmartFoxServer 2x 使用Simple Logging Facade for Java (SLF4J)進行日志記錄。 SLF4J 的真正目的是在日志框架上提供一個外觀,以便用戶可以用另一個日志框架替換一個日志框架。 在您的情況下,帶有 Logback 的 log4J。 我將首先解釋 SLF4J 的工作原理以及如何將一個日志框架更改為另一個日志框架,並簡要討論一些注意事項。 然后我將介紹一些 SmartFoxServer 的細節。

Java 架構的簡單日志外觀

SLF4J 提供 API 用作實際日志框架上的外觀(抽象層)。 這允許用戶在部署時輕松地在框架之間切換,而無需更改代碼。 但這也意味着 SLF4J 本身是不夠的——默認實現是 no-op。 為了實際記錄任何內容,您需要實際的日志框架(例如 log4j 或 logback)和所謂的“binder”,它充當 SLF4J 和日志框架之間的橋梁或適配器。

交換日志框架

SLF4J 用戶手冊提供了有關如何在部署期間將一個框架與另一個框架交換的詳細說明。 簡而言之,您只需要刪除舊的活頁夾和日志框架並添加新的活頁夾和新的日志框架。 要將 log4 與 logback 交換,您需要刪除 slf4j-log4j12 和 log4j jar 並添加 logback-classic 和 logback-core。

注意事項

您應該確保類路徑中只有一個綁定器實現。 不止一個會導致警告,而不是錯誤。 SLF4J 只會選擇其中一種實現。 但我不排除這會導致使用多個類加載器的更復雜應用程序(例如 SmartFoxServer)出現問題的可能性。 但更重要的是,您應該確保 SLF4J API、活頁夾和日志框架版本兼容。 例如,如果您使用舊版本的 SLF4J 和新版本的 logback,這可能會導致 ClassNotFoundException。 我懷疑這可能是您看到錯誤的原因。

將 lof4j 與 Logback 交換為 SmartFoxServer 2x 的日志記錄框架

SmartFoxServer 2x 版本 2.17.3 使用 SLF4J API 版本 1.7.5。 要交換 log4j,您需要先刪除lib/slf4j-log4j12-1.7.5.jar ,然后添加兼容版本的 logback-classic 和 logback-core jar。 例如logback-classic 1.1.0logback-core 1.1.0

您可以刪除lib/log4j-1.2.15.jar但我寧願保留它。 活頁夾( lib/slf4j-log4j12-1.7.5.jar )不打算直接使用,因此刪除應該是安全的。 另一方面,有些庫直接使用 log4j。 我不知道 SmartFoxServer 2x 是否使用任何此類庫,但保留它以防萬一更安全。 交換 binder 就足以讓 SLF4J 使用 Logback 並忽略 log4j。

記錄器輸出

SmartFoxServer 2x 解析記錄器輸出以提供一些功能,例如管理日志查看器。 如果您更改日志輸出,這可能會導致此功能停止工作,甚至可能導致其他問題(理論上不應該,但您永遠不知道)。 有一個配置文件( config/logParser.properties )可以讓你配置日志解析器,但我沒有找到任何關於它的文檔。 您可以嘗試在SmartFoxServer 論壇提問 開發人員實際上在那里非常活躍,因此他們可能會提供幫助。

僅為您的擴展程序交換記錄器

我給出的指令交換了所有擴展和 SmartFoxServer 的記錄器。 如果您願意,您可以嘗試僅將它們交換為您的擴展。 但我不太確定這是否以及如何工作。 每個類擴展都使用自己的類加載器,但這提供了擴展和 SmartFoxServer 和擴展之間的隔離,而不是擴展和 SmartFoxServer 之間的隔離。 這意味着如果將lib.jar添加到擴展 A 類路徑,擴展 B 或 SmartFoxServer 代碼將看不到它。 但是,如果您將lib.jar添加到 SmartFoxServer 類路徑中,則擴展 A 和擴展 B 都可以看到它。由於 SmartFoxServer 的類路徑中已經包含 SLF4J API,因此您不應將其添加到擴展類路徑中。 您可以嘗試將 logback-classic 和 logback-core 添加到您的擴展類路徑中。 但是在這種情況下,您的擴展類路徑中將有兩個綁定器實現(來自 SmartFoxServer 類路徑的 logback 和 log4j)。 正如已經討論過的,我不太確定這如何以及是否有效。

結論

SLF4J 提供了一種簡單的方法來交換日志框架,但有一些警告。 SmartFoxServer 本身也添加了一些警告。 除非 SmartFoxServer 團隊支持底層日志框架的交換(根據他們論壇中的一些回答判斷,他們不支持),否則我會非常小心,並且只有在有一些好處並且這不僅僅是個人問題的情況下才進行此類交換偏愛。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM