Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用记录器打印异常?_Java_Exception_Logging - Fatal编程技术网

Java 如何使用记录器打印异常?

Java 如何使用记录器打印异常?,java,exception,logging,Java,Exception,Logging,在这种情况下,我希望使用logger打印catch块中捕获的所有异常 try { File file = new File("C:\\className").mkdir(); fh = new FileHandler("C:\\className\\className.log"); logger.addHandler(fh); logger.setUseParentHandlers(false); SimpleFo

在这种情况下,我希望使用logger打印catch块中捕获的所有异常

 try {
        File file = new File("C:\\className").mkdir();
        fh = new FileHandler("C:\\className\\className.log");
        logger.addHandler(fh);
        logger.setUseParentHandlers(false);
        SimpleFormatter formatter = new SimpleFormatter();
        fh.setFormatter(formatter);
    } catch (Exception e) {
        logger.info(e);
    }
我发现错误记录器无法应用于
java.io.Exception…

我关心的是,如果我在try块中做了这么多事情,并且只保留了一个catch块作为catch(异常e),那么有没有办法使用记录器打印catch块中捕获的任何类型的异常?
注意:我们使用的是java.util.logging.Logger API

您可以使用此方法将异常堆栈记录为字符串

 public String stackTraceToString(Throwable e) {
    StringBuilder sb = new StringBuilder();
    for (StackTraceElement element : e.getStackTrace()) {
        sb.append(element.toString());
        sb.append("\n");
    }
    return sb.toString();
}

尝试记录堆栈跟踪,如下所示:

logger.error("Exception :: " , e);

您可能应该澄清您正在使用的记录器

org.apache.commons.logging.Log
接口具有方法
void error(对象消息,Throwable t)
(和方法
void info(对象消息,Throwable t)
),该方法将堆栈跟踪与自定义消息一起记录。Log4J实现也有这种方法

所以,你可能需要写:

logger.error("BOOM!", e);
如果您需要以信息级别记录它(尽管这可能是一个奇怪的用例),那么:

希望有帮助。

使用:
LOGGER.log(Level.INFO,“遇到异常”,e)

或者
LOGGER.info(“得到了一个异常。”+e.getMessage())

一般来说,日志文件名、格式等的可能重复项留在代码之外,以便在生产中进行调整。我尝试了这个方法,得到了错误符号not found Symbol:method error(java.lang.String,java.io.IOException)位置:class java.util.logging.Logger Logger.error(“Exception:”,e)@Pankaj您不是在使用Log4j进行日志记录吗。该方法出现在
org.apache.log4j.Logger
@Kadelakig抱歉,我明白了,我们使用的是java.util.looging APIOh。似乎还有一些类似的功能:
java.util.logging.Logger.getLogger(“Test”).log(Level.INFO,“BOOM!”,e)如果异常是意外的,那么我建议对log messageYes使用严重警告日志级别,对于可能为真的意外异常。不过我是在回答这个问题,提问者使用info log level来记录,因此我的示例使用info。
logger.info("Just a stack trace, nothing to worry about", e);