一個可以在代碼的任意區域無入侵地加入日志的工具:anylog
anylog 是一個可以在代碼的任意區域無入侵地加入日志的工具,適用于線上問題排查。
anylog 為開發人員提供一個易于使用的平臺,幫助開發人員在正在運行的系統中隨時加入自己想要的日志,而免于修改代碼和重啟。
使用場景舉例
1、一些同學在寫代碼時,把異常吃掉了,使得問題難以查找,可以使用這個工具,動態打印出被吃掉 的異常,而不用停機。 2、一些項目依賴第三方jar包,如果發生問題,但第三方包中無日志打印,以往可能需要重新編譯第 三方包,加上日志,重啟服務,然后排查問題。但使用這個工具,就可以直接動態加入日志,而不用 修改第三方jar包,也不用重啟。
已有功能
1、讓系統打印某個exception的堆棧,無論此exception是否已經被吃掉都可打印 2、在某個指定類的某個方法的某一行,輸出日志。 3、在某個指定類的某個方法的開始,輸出日志。 4、在某個指定類的某個方法的結束,輸出日志。 如果需要擴展新的功能(例如輸出jvm的cpu占用,內存大小等),只需要實現spi中的 com.github.jobop.anylog.spi.TransformDescriptor 和com.github.jobop.anylog.spi.TransformHandler接口, 然后把實現的jar包放到providers目錄中即可識別。
使用方法
1、獲取運行程序: 1)可以到以下地址獲取正式發行版:https://github.com/jobop/release/tree/master/anylog 2)你也可以clone下源碼后,執行如下命令,生成運行程序,生成的運行程序將在dist目錄下 生成windows版本: mvn install 生成linux版本: mvn install -Plinux 2、直接執行startup.bat或者startup.sh即可運行起來 3、訪問 http://127.0.0.1:52808 即可使用
功能擴展
anylog利用spi機制實現其擴展,如果你想要對anylog增加新的功能(例如添加返回值打印的功能)可以按照如下步驟操作: 1、使用如下命令,生成一個spi實現工程,并導入eclipse mvn archetype:generate -DarchetypeGroupId=com.github.jobop -DarchetypeArtifactId=anylogspi-archetype -DarchetypeVersion=1.0.4 2、參照該工程中已有的兩個例子(一個是在方法開始插入日志,一個是在方法結束插入日志),實現TransformDescriptor和TransformHandler接口 3、把兩個接口實現類的全路徑,分別加到以下兩個文件中 src/main/resources/META-INF/services/com.github.jobop.anylog.spi.TransformDescriptor src/main/resources/META-INF/services/com.github.jobop.anylog.spi.TransformHandler 4、執行mvn install打包,在dist下會生成你的擴展實現jar。 5、把擴展實現jar拷貝到anylog的providers目錄下,重啟即可生效。 tips:在實現spi時,我們提供了SpiDesc注解,該注解作用在你實現的TransformDescriptor上,可以用來生成功能描述文字。 如果要深入了解spi機制,請自行google:java spi
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!