arthas icon indicating copy to clipboard operation
arthas copied to clipboard

need help for watch command ognl expression

Open goynam opened this issue 2 years ago • 6 comments

如何在 watch 命令中打印 returnObj 的属性。 watch 命令给 returnObj 一个用户列表。我只想打印用户对象的“名称”字段。

goynam avatar Dec 01 '22 16:12 goynam

watch com.xxx.XXXX 监控方法名 "returnObj.{名称}" 例如: watch com.example.Test test "returnObj.{name}"

MissingNone avatar Dec 05 '22 05:12 MissingNone

但是 returnObj 是 List 的一个对象。如何迭代并仅打印名称字段?

goynam avatar Dec 05 '22 14:12 goynam

按照我之前给的命令输出的,是不是你想要的结果? image

MissingNone avatar Dec 06 '22 01:12 MissingNone

所以,如果我尝试这个命令:

观看 com.demo.UserDetailsS​​ervice getUser“{params,returnObj.name}”

我收到以下错误:

ognl.NoSuchPropertyException: java.util.ArrayList.name,访问 /dev/null/logs/arthas/arthas.log 了解更多详情。

goynam avatar Dec 07 '22 05:12 goynam

watch com.xxx.XXXX 监控方法名 "returnObj.{名称}" 例如: watch com.example.Test test "returnObj.{name}"

这实际上有效,非常感谢。只是一个天真的问题,我如何使用 watch 命令扩展我想打印的对象树的深度。当前限制为 4,是否有打印更多嵌套结构的方法。还有在文件中输出 watch 命令日志的方法吗?

goynam avatar Dec 07 '22 05:12 goynam

1.watch命令最大深度是4,这个是硬编码的,需要通过修改源代码,然后重新自行编译打包。需要修改com.taobao.arthas.core.view.ObjectView这个类中的MAX_DEEP。 2.在文件中输出watch命令的日志,可以通过执行options save-result true。日志会输出到{user.home}/logs/arthas-cache/result.log这个文件中,详细情况请看文档,以下是英文文档地址https://arthas.aliyun.com/en/doc/save-log.html

MissingNone avatar Dec 11 '22 09:12 MissingNone