一個可以在代碼的任意區域無入侵地加入日志的工具:anylog

jopen 10年前發布 | 8K 次閱讀 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

項目主頁:http://www.baiduhome.net/lib/view/home/1444552033117

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!