例如,我想在错误的情况下输出包/类/方法信息,以便能够识别错误发生的确切方法。
是否有代码可以提供此信息?
答案 0 :(得分:4)
stacktrace
JVM
它包含所有这些信息,只需记录下来。
或以编程方式如果要确定
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
根据Javadocs:
[...]数组的第一个元素表示堆栈的顶部,这是序列中最近的方法调用。数组的最后一个元素表示堆栈的底部,这是序列中最近的方法调用。
StackTraceElement包含getClassName()
,getFileName()
,getLineNumber()
和getMethodName()
。
答案 1 :(得分:4)
出现错误时创建例外。如果要将其打印到控制台,则可以在异常上调用exception.printstacktrace();
方法。
最好使用像log4j这样的日志框架,你可以logger.error( "message", exception );
,并在日志中获得堆栈跟踪。
答案 2 :(得分:2)
不要选择这么复杂的解决方案。
如果您使用的是log4j,那么您已经完成了。 使用如下模式:%-5p%d [%t]%C {1}。%M(%L):%m%n
%t是当前线程 %C {1}是类的名称(省略{1},您将获得包的完整限定名称) %M是方法的名称 %L是行号 有关详情,请点击此处:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
请记住,登录方法名称或行号会降低性能。 切勿在生产系统中这样做。