通过java.util.logging从异常对象获取信息

通过java.util.logging从异常对象获取信息,java,logging,java.util.logging,Java,Logging,Java.util.logging,我想在java应用程序开发期间进行日志记录。我希望在异常处理期间从异常对象获取信息。首选从对象查询哪些信息?使用.getMessage()方法还是.toString()方法 My.getMessage()代码段: try { //my code } catch( Exception ex ) { log.log( Level.SEVERE, ex.getMessage(), ex ); } try { //my code } catch( Exception ex )

我想在java应用程序开发期间进行日志记录。我希望在异常处理期间从异常对象获取信息。首选从对象查询哪些信息?使用.getMessage()方法还是.toString()方法

My.getMessage()代码段:

try {
    //my code
} catch( Exception ex ) {
    log.log( Level.SEVERE, ex.getMessage(), ex );
}
try {
    //my code
} catch( Exception ex ) {
    log.log( Level.SEVERE, ex.toString(), ex );
}
My.toString()代码段:

try {
    //my code
} catch( Exception ex ) {
    log.log( Level.SEVERE, ex.getMessage(), ex );
}
try {
    //my code
} catch( Exception ex ) {
    log.log( Level.SEVERE, ex.toString(), ex );
}

默认情况下,异常
toString()
方法将把异常类的名称和异常消息放在一起。因此,
getMessage
的唯一区别在于
toString()
也将为您提供异常类

现在,无论哪种方式,
java.util.logging
都将打印类的名称、消息和堆栈跟踪,因为您将异常作为调用
log
的第三个参数传递。因此,提供
getMessage()
toString()
的结果是无用的。相反,您应该放置一条消息,指示异常发生的上下文以及其他相关信息

例如,考虑以下内容:

    String identifier = "duck";

    try {
        int result = Integer.parseInt(identifier);
    }
    catch(Exception e) {
        log.log(Level.SEVERE, "Failed to parse the identifier.", e);
    }
由于“duck”不是整数,这将导致异常。然后程序将打印:

SEVERE: Failed to parse the identifier.
java.lang.NumberFormatException: For input string: "duck"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at test.DDD.main(DDD.java:13)

那么,当你试过的时候,哪一个对你更有用呢?