现场故事:从Log4J迁移到Log4J2
通過從應用程序中學習企業APM產品,發現更快,更高效的性能監控。 參加AppDynamics APM導覽!
與許多Java應用程序一樣,AppDynamics Java代理廣泛使用日志記錄。 多年來,我們一直使用Log4J作為日志記錄框架。 雖然Log4J的最新版本是2012年–并且Apache基金會于2015年8月宣布Log4J的生命周期終止 –但我們沒有升級到Log4J2,因為需要維護對Java 5 VM和其他競爭優先級的支持。 。 但是,我們最近從整體存儲庫轉移到特定于產品的存儲庫使升級成為可能。
Log4J2充滿了誘人的功能。 例如,該框架通過提供無垃圾記錄,極大地提高了記錄速度并減少了內存使用。 通過對異步日志記錄的本機支持,我們可以進一步減少在客戶應用程序上運行時花費在日志記錄上的時間。 由于壓縮也是本機功能,因此我們的代理可以承受更多日志記錄,同時減少文件存儲需求。 這兩個功能使我們能夠添加更頻繁,質量更高的日志記錄,其中包含可為我們的客戶成功提供可行信息的信息,以及可幫助客戶的開發團隊。
遷移目標和挑戰
 那么,我們想通過遷移完成什么? 在遷移過程中我們面臨什么挑戰? 
 讓我們從挑戰開始: 
–我們必須對框架包進行命名空間,以將Log4J的使用與客戶的日志記錄框架隔離開來,并且我們還需要使源Java 5兼容,因為標準Log4J2需要Java 1.6及更高版本。
–由于幾乎每個班級都使用日志記錄,因此我們必須找到一種方法來使這些更改遞增,并且(相對)易于檢查,以保持生產監控代理所需的高質量。
 –萬一Log4J2初始化失敗,我們必須能夠使用Log4J(已被證明可以工作)。 
 我們的首要目標是用Java 5兼容源重新打包jar。 這一步很容易。 我們以編程方式重構了所有類,以為其包命名空間。 我們手動修復了一些涉及僅Java 6及更高版本支持的API的問題,例如String.isEmpty()。 
第二步是在兼容環境中測試框架。 我們使用了一個已安裝Java 5的docker容器,并創建了一個反映我們代理結構的測試應用程序。 這一步很耗時,因為我們需要弄清楚配置和自定義如何與我們的代理一起使用。 例如,我們擁有的功能之一就是代理錯誤安全性。 如果代理代碼遇到太多內部錯誤,我們將使日志靜音并刪除檢測。 我們擁有的另一個功能是重用節點名稱。 我們緩沖日志事件,僅在從UI知道節點名稱后,才將其寫入文件。 使用測試應用程序,我們能夠模擬所有這些功能,為遷移做準備。
為了實現可逆性,我們仍然同時存在兩個框架。 我們使用橋接模式將日志記錄提取到單獨的共享包中。 這使我們在代碼庫中擁有多個日志記錄框架,并且我們可以在運行時輕松地在它們之間進行切換。 它還允許我們將來升級日志記錄框架,從而提供高度的靈活性和可變性。 這一步很重要,因為我們必須更改構建腳本并更改使用記錄器的每個文件。
最后,我們簡單地移動了從第二步創建的自定義附加程序的Log4J2版本,復制了配置代碼,并由此成功地升級了日志記錄框架!
4.4中的Log4J2日志關聯支持
 在使用Log4j2時,我們還借此機會在日志關聯功能中增加了對它的支持。 
 日志關聯使用戶可以在其日志附加器模式中指定一個地點,以便我們在運行時插入我們的業務交易(BT)請求guid。 在BT上下文中對記錄器的任何調用都將動態地插入guid,而不管該行最終是在文件中還是在控制臺中結束。 
這些向導在日志輸出中的存在可增強日志處理應用程序的功能,包括我們自己的Log Analytics產品,還包括諸如Splunk之類的其他產品。 使用它們,我們可以將單個交易記錄的任何行與我們在APM端針對該請求收集的快照數據相關聯,而無需對客戶應用程序進行任何更改。 相反,它也使我們Controller的用戶可以輕松地從BT快照過渡到日志中該BT請求期間發生的確切行。
除了對Log4J2的新支持之外,受支持的日志記錄框架還包括Log4J,Logback和Slf4J。
最后的想法
首先,要進行產品范圍的升級是一項艱巨的任務。 但是,一旦分解成小的獨立步驟,它將變得更加易于管理。 運行10k似乎比運行10個1ks困難。 升級進行得很順利,因為每一步都對產品進行了更改,同時保持了產品的功能性并準備好發貨。 這對于更快地進行構建驗證和代碼審查是有好處的。
要了解更多信息,請參閱有關業務交易和日志關聯的文檔。 想了解AppDynamics Log Analytics的工作原理嗎? 立即開始免費試用 。
通過從應用程序中學習企業APM產品,發現更快,更高效的性能監控。 參加AppDynamics APM導覽!
Li Haojun Li是此博客文章的合著者。 Haojun是一位軟件工程師,已經在AppDynamics工作了大約5個月。 他是加州大學伯克利分校的應屆畢業生,擁有計算機科學和統計學學位。 周末期間,他喜歡在道路上航行和騎自行車。
翻譯自: https://www.javacodegeeks.com/2018/03/tales-from-the-field-migrating-from-log4j-to-log4j2.html
總結
以上是生活随笔為你收集整理的现场故事:从Log4J迁移到Log4J2的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 联通牌5G路由器联通如何加路由器
 - 下一篇: 贝尔金路由器如何设置上网如何设置贝尔金无