Arthas: logger命令修改log level时出错

Created on 8 Nov 2019  ·  4Comments  ·  Source: alibaba/arthas

  • [ ] 我已经在 issues 里搜索,没有重复的issue。

环境信息

  • arthas-boot.jar 或者 as.sh 的版本: 3.1.0
  • Arthas 版本: 3.1.4
  • 操作系统版本: xxx
  • 目标进程的JVM版本: 1.8.0_231
  • 执行arthas-boot的版本: 3.1.0

重现问题的步骤

  1. logger -n org.apache.coyote.http11.Http11InputBuffer -l DEBUG

期望的结果

update logger level success

实际运行的结果

update logger level fail

arthas异常堆栈

01 2019-11-08 14:20:15.502 ERROR [as-command-execute-daemon:arthas] [] [] [arthas] logger command update logback level error
java.lang.ClassNotFoundException: com.taobao.arthas.core.command.logger.LogbackHelper5afdafe870dea4e
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at com.taobao.arthas.core.command.logger.LoggerCommand.updateLevel(LoggerCommand.java:345)
    at com.taobao.arthas.core.command.logger.LoggerCommand.level(LoggerCommand.java:144)
    at com.taobao.arthas.core.command.logger.LoggerCommand.process(LoggerCommand.java:122)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:82)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:18)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:111)
    at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:108)
    at com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessTask.run(ProcessImpl.java:370)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

sc 命令能查看到两个类:

com.taobao.arthas.core.command.logger.LogbackHelper5afdafe831cefde0
com.taobao.arthas.core.command.logger.LogbackHelper

sc -d com.taobao.arthas.core.command.logger.LogbackHelper5afdafe831cefde0

结果:

class-info        com.taobao.arthas.core.command.logger.LogbackHelper5afdafe831cefde0              
 code-source       /home/work/.arthas/lib/3.1.4/arthas/arthas-core.jar                              
 name              com.taobao.arthas.core.command.logger.LogbackHelper5afdafe831cefde0              
 isInterface       false                                                                            
 isAnnotation      false                                                                            
 isEnum            false                                                                            
 isAnonymousClass  false                                                                            
 isArray           false                                                                            
 isLocalClass      false                                                                            
 isMemberClass     false                                                                            
 isPrimitive       false                                                                            
 isSynthetic       false                                                                            
 simple-name       LogbackHelper5afdafe831cefde0                                                    
 modifier          public                                                                           
 annotation                                                                                         
 interfaces                                                                                         
 super-class       +-java.lang.Object                                                               
 class-loader      +-org.springframework.boot.loader.LaunchedURLClassLoader@31cefde0                
                     +-sun.misc.Launcher$AppClassLoader@70dea4e                                     
                       +-sun.misc.Launcher$ExtClassLoader@335ff8d5                                  
 classLoaderHash   31cefde0
question-answered

Most helpful comment

仔细看了一下文档和源码,指定classloader后成功了

logger -c31cefde0 -n org.apache.coyote.http11.Http11InputBuffer -l DEBUG

All 4 comments

最好能提供可重现的demo

仔细看了一下文档和源码,指定classloader后成功了

logger -c31cefde0 -n org.apache.coyote.http11.Http11InputBuffer -l DEBUG

遇到了同样的问题 通过指定classloader解决了 但是文档中并没有提到需要显式置顶classloader啊

[arthas@5195]$ logger --name org.apache.ibatis.logging --level info
update logger level fail.
[arthas@5195]$ logger -c 439f5b3d --name org.apache.ibatis.logging --level info
update logger level success.

@zhugw 欢迎提交pr改进文档

Was this page helpful?
0 / 5 - 0 ratings