`

【Arthas】运行时调整 Java 程序的 logger 日志级别

    博客分类:
  • Java
阅读更多

生产环境不开启 DEBUG 级别的日志

对于部署到生产环境的程序,我们通常会将其日志级别设置为 INFO。DEBUG 级别的日志一般用于排查异常,而且通常数量较多。很少会有程序在生产环境默认开启 DEBUG 级别的日志。一个正常运行的程序,如果短时间内产生了大量日志,那么很可能是 logger 级别设置不正确。
 

我也见过有些程序员有意将本应归为 DEBUG 级别的日志用 INFO 级别记录,只是为了在出现业务异常时方便排查原因。当然这也会导致日志文件非常不直观,阅读体验非常差。在业务执行数量较大时,这些 INFO 日志甚至会“冲”掉目标日志。
 

但很多时候仅靠被持久化的业务数据记录很难排查问题原因,而 DEBUG 级别的日志能更直观得反映程序的运行逻辑。所以很多人会选择将程序的日志等级调整为 DEBUG,重现问题并获得相应日志,再恢复日志等级;这个过程中要保持程序继续运行,不能停服。

 

利用 Arthas 更改 Java 程序的日志级别

Arthas 是阿里推出的一个Java程序诊断工具。它利用 Java Agent 技术对运行中的Java程序进行操作。
我们可以通过 Arthas 来更改目标 logger 的日志级别。
 

方式1:利用 ognl 命令更改日志级别

Arthas 的 ognl命令 可用于执行 ognl 表达式。这么强大的工具当然可以更改 logger 的日志级别。

示例:

ognl '@com.example.demo.arthas.user.UserController@logger.setLevel(@ch.qos.logback.classic.Level@DEBUG)'

 

方式2:利用 logger 命令更改日志级别

Arthas 的 logger 命令操作更直接:

logger --name com.example.demo.arthas.user.UserController --level debug

注意:目前 Arthas logger 命令实现还不够完善,直接执行此命令可能无法成功。可先执行查看命令再执行更改level命令。

logger --name com.example.demo.arthas.user.UserController

 

为什么 logger 命令这么简单的输入居然能更改日志等级?

其实并不没有什么魔法或奇技淫巧,而是 Arthas 在背后默默地做了很多“脏活”。它内部有3个工具类 Log4jHelper、Log4j2Helper、LogbackHelper 分别用于处理 "org.apache.log4j.Logger", "org.apache.logging.log4j.Logger", "ch.qos.logback.classic.Logger" 的操作。LoggerCommand 类中的 level 方法则会用这3个Helper类都执行一遍:

public void level(CommandProcess process) {
    Instrumentation inst = process.session().getInstrumentation();
    boolean result = false;
    try {
        Boolean updateResult = this.updateLevel(inst, Log4jHelper.class);
        if (Boolean.TRUE.equals(updateResult)) {
            result = true;
        }
    } catch (Throwable e) {
        logger.error("arthas", "logger command update log4j level error", e);
    }

    try {
        Boolean updateResult = this.updateLevel(inst, LogbackHelper.class);
        if (Boolean.TRUE.equals(updateResult)) {
            result = true;
        }
    } catch (Throwable e) {
        logger.error("arthas", "logger command update logback level error", e);
    }

    try {
        Boolean updateResult = this.updateLevel(inst, Log4j2Helper.class);
        if (Boolean.TRUE.equals(updateResult)) {
            result = true;
        }
    } catch (Throwable e) {
        logger.error("arthas", "logger command update log4j2 level error", e);
    }

    if (result) {
        process.write("update logger level success.\n");
    } else {
        process.write("update logger level fail.\n");
    }
}
分享到:
评论

相关推荐

    Java诊断利器Arthas排查问题实践.pptx

    Java诊断利器Arthas排查问题实践.pptx

    java程序性能检查工具arthas

    程序性能检查工具,用于定位java性能问题,arthas 具体有开源地址,需要的话去github上搜索arthas

    arthas,阿里巴巴Java.zip

    arthas是一个由阿里巴巴开源的java诊断工具。

    linux上 arthas 的安装教程

    实时监控:Arthas可以实时监控Java应用程序的运行状态,包括线程、类加载、GC等信息,帮助开发者了解应用程序的运行情况。 2. 命令行工具:Arthas提供了丰富的命令行工具,可以通过命令行进行故障排查和性能优化,...

    Arthas开源的Java诊断工具.rar

    Arthas 的基本原理是使用 Java Agent 实现的,它会在应用程序启动时向 JVM 中注入一个 Java Agent,该 Agent 可以修改字节码,动态地为应用程序增加一些代码。通过这种方式,Arthas 可以在应用程序运行时,动态地...

    Arthas开源的Java诊断工具-其他

     Arthas开源的Java诊断工具 更新日志:v3.5.1Add vmtool commandRemove the useless resetClassFileTransformer in Enhancer对于非chunk response,返回标准的content-length字段The jvm command may throw ...

    arthas-boot.jar 阿里的Java程序诊断工具

    arthas-boot.jar 阿里的Java程序诊断工具

    arthas-boot.jar

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行...

    研发-Java诊断工具-Arthas

    研发-Java诊断工具-Arthas

    阿里巴巴开源的诊断工具Arthas介绍.ppt

    Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具,开始在淘宝内部孵化使用,后来成为阿里java项目必须使用的内部工具。2018年arthas成为ali开源项目,代码托管在github上。这是带给java系一大福音,项目深受...

    arthas安装包基于JAVA

    arthas安装包

    开源 Java 诊断工具-Arthas 离线包

    在阿里巴巴内部,有很多自研工具供开发者使用,其中有一款工具,是几乎每个Java开发都使用过的工具,那就是Arthas,这是一款Java诊断工具,是一款牛逼带闪电的工具。该工具已于2018年9月份开源。附件为离线包

    arthas:阿里巴巴Java诊断工具ArthasAlibaba Java诊断利器Arthas

    Arthas允许开发人员解决Java应用程序的生产问题,而无需修改代码或重新启动服务器。背景通常,无法从本地开发环境访问生产系统网络。 如果生产系统遇到问题,则无法使用IDE远程调试应用程序。 更重要的是,在生产...

    Cubic java应用诊断工具.rar

    java的分析工具有:1.VisualVM,java应用程序性能分析和运行监控工具;2.YourKit,java性能分析工具;3.Jetm,java程序执行时间测量工具;4.Arthas,java诊断工具; java的分析工具有以下几种 1.VisualVM ...

    Arthas(arthas-3.7.1.zip)

    Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等...

    arthas 3.3.6

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行...

    研发-Java诊断工具-Arthas.pptx

    内部公司一个关于Java诊断工具Arthas.ppt分享,Arthas 是阿里巴巴在2018年开源出来的一款 Java 诊断利器,它主要是针对线上环境,能够帮助我们更好的定位问题。 截止到2019年8月29日,在Github上总共被916人watch,...

    Java在线诊断工具Arthas相关教程资料汇总.rar

    阿里巴巴开源的诊断工具Arthas介绍.ppt arthas用户文档.pdf Arthas.xmind Arthas阿尔萨斯使用说明.docx Java开源诊断工具Arthas使用方法详解.pdf arthas-packaging-3.1.0-doc

    Java 诊断工具-Arthas 离线包

    开源 Java 诊断工具-Arthas 离线包。在阿里巴巴内部,有很多自研工具供开发者使用,其中有一款工具,是几乎每个Java开发都使用过的工具,那就是Arthas,这是一款Java诊断工具,是一款牛逼带闪电的工具。该工具已于...

Global site tag (gtag.js) - Google Analytics