【问题标题】:How to get actual line number in spring Aspectj logging to track exception?如何在 Spring Aspectj 日志记录中获取实际行号以跟踪异常?
【发布时间】:2016-01-15 10:24:52
【问题描述】:

我在 Spring MVC 框架的应用程序中实现了 AspectJ。我可以跟踪函数调用的入口点和出口点,但无法从源文件中获取实际的行号。它显示了 Logger 类的行号放置切入点和建议的位置。

【问题讨论】:

  • 发布示例堆栈跟踪?我在调试 Spring AOP 代码时从来没有遇到过问题。

标签: spring aspectj


【解决方案1】:

也许你的问题类似于this one,所以希望你的解决方案是一样的:

joinPoint.getSourceLocation().getLine()

这适用于真正的 AspectJ(通过 LTW),但可能不适用于 Spring AOP,它只是某种基于代理的“AOP lite”框架。有关如何为 AspectJ 配置 Spring 的更多信息,请参阅用户手册,10.8, Using AspectJ with Spring applications 部分。

【讨论】:

  • 给我例外,我的版本是 3.0
  • 仔细阅读我的答案和链接的答案,你就会知道哪里出了问题。顺便说一句,“给我例外”不是很具有描述性。
【解决方案2】:

我不知道这个任务是否有特殊的 AspectJ 功能,如果没有,那么你可以获取 StackTrace 然后使用StackTraceElement.getLineNumber()

//StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
Exception e =...
e.getStackTraceElement[]
stackTrace[stackTrace.length - 1].getLineNumber();

【讨论】:

  • 这个过程为我提供了 Spring 框架和 servlet 的所有异常细节,除了发生错误的实际行。我得到 $$EnhancerByCGLIB$$1a42e2f0 与发生异常的类,但不是异常行。
  • A 我理解错了这个问题,但我希望现在我明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 2022-12-21
  • 2013-08-31
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多