anylog

Project Url: jobop/anylog
Introduction: a tool which can let us log on the running application without restart.
More: Author   ReportBugs   
Tags:

关于 anylog

    QQ 群:287863133
    anylog 为开发人员提供一个易于使用的平台,帮助开发人员在正在运行的系统中随时加入自己想要的日志,而免于修改代码和重启。

使用场景举例

    1、一些同学在写代码时,把异常吃掉了,使得问题难以查找,可以使用这个工具,动态打印出被吃掉
        的异常,而不用停机。
    2、一些项目依赖第三方 jar 包,如果发生问题,但第三方包中无日志打印,以往可能需要重新编译第
        三方包,加上日志,重启服务,然后排查问题。但使用这个工具,就可以直接动态加入日志,而不用
        修改第三方 jar 包,也不用重启。

已有功能

    1、让系统打印某个 exception 的堆栈,无论此 exception 是否已经被吃掉都可打印
    2、在某个指定类的某个方法的某一行,输出日志。
    3、在某个指定类的某个方法的开始,输出日志。
    4、在某个指定类的某个方法的结束,输出日志。  
    5、打印方法耗时,支持方法嵌套。

    如果需要扩展新的功能(例如输出 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

使用技术栈

    attachApi,Instrumentation ,javassist,spi,classloader 机制,socket

常见问题

    1、启动后看不到 vm 列表怎么办?
    首先检查所使用的版本是否正确,如果版本正确,有可能是权限的问题,权限问题往往在 win7 出现较多,可尝试使用管理员权限启动。
    2、使用 eclipse 启动 tomcat 无法生效。
    使用 eclipse 启动 tomcat 之后,tomcat 的进程是独立于 eclipse 的,有的同学会误注入了 eclipse 的进程,从而看不到效果。一般来说,启动 tomcat 后,anylog 会在 30 秒内检测出 tomcat 进程。
    3、如何撤销修改?
    当 jvm 被修改后,在 jvm 列表界面,此进程后面会出现红色的 restore_vm 链接,点击即可恢复。当 anylog 退出时也会自动恢复。

    感谢 @aqxiebin @tebaton 提供支持
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools