java中,想记录异常信息,该如何获得发生异常的类名和方法名呢?不要用log4j等。

StackTraceElement[] st = e.getStackTrace();
string exclass=st[0].getClassName();
这样不行,得到的不是发生异常的类,而是the name of the exception.
StackTraceElement[] st = e.getStackTrace();
string exclass=st[0].getClassName().toString();
这样不行,得到的不是发生异常的类,而是the name of the exception.

我觉得你写的是对的
StackTraceElement[] st = ex.getStackTrace();
for (StackTraceElement stackTraceElement : st) {
String exclass = stackTraceElement.getClassName();
String method = stackTraceElement.getMethodName();
System.out.println(exclass);
System.out.println(method);
}
}
这个就是整个异常抛出的栈结构啊追问

谢谢啊,是我想错了。获取当前类名和方法名怎么获取?

追答


exclass这个就是当前类名

method就是当前异常处的方法名

比如
public static void getA() {
try {
throw new Exception();
} catch (Exception ex) {
StackTraceElement[] st = ex.getStackTrace();
for (StackTraceElement stackTraceElement : st) {
String exclass = stackTraceElement.getClassName();
String method = stackTraceElement.getMethodName();
System.out.println(new Date() + ":" + "[类:" + exclass + "]调用"
+ method + "时在第" + stackTraceElement.getLineNumber()
+ "行代码处发生异常!异常类型:" + ex.getClass().getName());
}
}
}

调用后打印结果就是
Thu Sep 27 14:59:41 CST 2012:[类:AAA]调用getA时在第6行代码处发生异常!异常类型:java.lang.Exception
Thu Sep 27 14:59:41 CST 2012:[类:sss]调用main时在第4行代码处发生异常!异常类型:java.lang.Exception

追问

我写的运行出来不是这个结果啊。是不是跟我抛出的异常类型有关,我抛出的是SQLException,最后得到是类名和方法名都是sql上层的类和方法。

追答

应该不是 这个是个栈结构 你去取st[0]应该是最上层的位置吧,你需要取的是st[st.length-1]

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-27
楼主你问的这个问题很有水平啊 你要获得方法名和类名 建议你Debug跟踪一下 或者1楼写的那样看看什么异常 查查api
第2个回答  2012-09-27
使用的st应该转换成String追问

谢谢,刚才我随便写的,没注意。但我要问的不是这个问题。

追答

try {
//代码块
} catch (Exception e) {
System.out.println(e.getMessage());}
这样就可以了

第3个回答  2012-09-27
try {
//代码块

} catch (Exception e) {
System.out.println(e.getMessage());
}//这样就可以捕获你的错误追问

是我没说明白么?我想获得发生异常的类名,方法名,并把他们单独存放在相应的变量里。

java中,想记录异常信息,该如何获得发生异常的类名和方法名呢?不要用l...
String exclass = stackTraceElement.getClassName();String method = stackTraceElement.getMethodName();System.out.println(exclass);System.out.println(method);} } 这个就是整个异常抛出的栈结构啊

JAVA异常问题
有一个Logger称为Root,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法获得,其它Logger通过 Logger.getLogger(String name)方法。 Appender则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如 console、files、GUI components、NT Event Loggers等,一个Logger可以拥有多个Append...

为什么使用 SLF4J 而不是 Log4J 来做 Java 日志
下面的SLF4J日志方法的代码,来自于slf4j-log4j12-1.6.1.jar包里的Log4j的适配器类 Log4jLoggerAdapter.public void debug(String format, Object arg1, Object arg2) { if (logger.isDebugEnabled()) { FormattingTuple ft = MessageFormatter.format(format, arg1, arg2); logger.log(FQCN,...

java中如何获取 控制台的输出信息,错误信息,和异常信息。
它返回static PrintStream,还会发现System有个方法是static void setOut(PrintStream out)重新分配“标准”输出流。 再点击PrintStream,很明显它是OutputStream 的子类 解决如下 输出流重定向 import java.io.*;public class IO2File { public static void main(String[] args) throws IOException { File ...

java 中怎么将程序出现的异常信息保存到日志文件中
设置配置文件.然后在你的类中创建这个的对象 ,这个对象的构造器需要这个类的完整名,例如:private static final Logger logger = Logger.getLogger(xxx.class);然后在你需要的地方使用这个对象,例如:logger.info(message);log4j有三种级别,info,error,debug,在配置文件中可以配置保存的路径,保存的级别 ...

大厂都是如何解决Java日志级别,重复记录、丢日志问题?
includeCallerData默认false:方法行号、方法名等信息不显示 queueSize控制阻塞队列大小,使用的ArrayBlockingQueue阻塞队列,默认容量256:内存中最多保存256条日志 discardingThreshold丢弃日志的阈值,为防止队列满后发生阻塞。默认队列剩余容量<队列长度的20%,就会丢弃TRACE、DEBUG和INFO级日志 neverBlock控制队列满时,加入的数据...

java中如何使用log4j将记录的操作日志信息
打印参数如下: 6.1%m 输出代码中指定的消息 6.2%p 输出优先级,即 DEBUG , INFO , WARN , ERROR , FATAL 6.3%r 输出自应用启动到输出该 log 信息耗费的毫秒数 6.4%c 输出所属的类目,通常就是所在类的全名 6.5%t 输出产生该日志事件的线程名 6.6%n 输出一个回车换行符, Windows ...

java常见log日志的使用方法详细解析
1. Java.util.Logger原生Logger主要通过import java.util.logging.Logger;引入,其关键方法如日志记录和级别控制。例如,设置日志级别为ALL会输出severe、warning和info级别的信息。通过logger.setLevel(Level.ALL);实现定制输出级别。示例代码展示,低于info级别的信息通常不会在终端显示,但可通过调整级别控制...

爆破专栏丨SpringBoot2.x系列教程之整合Log日志功能记录异常信息
日志的作用在于提供项目调试、确认输出结果的正确性以及在生产环境中记录异常信息,以便进行优化和bug解决。接下来,让我们了解一下Java中的常用日志框架。一. Java中常用的日志框架 1. 关于System.out.println()简单项目中,使用System.out.println()打印日志是常见的做法。然而,对于大型项目,此方法操作...

一文搞懂 Java 日志记录(Log4j\/Log4j2)
在编写Java应用时,建议根据需要在关键逻辑点使用日志,例如debug级别记录详细流程,info及以上级别记录异常或重要事件。同时,避免过度日志,以防影响程序性能或产生过多不必要的文件。在Log4j2中,异步日志记录是其重要改进,通过LMAX disruptor库可实现高效的非阻塞通信。总的来说,合理使用Log4j2,能够帮助...

相似回答