最终,我想

if (badThingsHappen) {
 log the issue
 throw exception with description
}

这里明显的冗余是,异常描述和要记录的消息通常(通常)是相同的。

这看起来很冗长
if (badThingsHappen) {
 logger.error("oh no! not again!");
 throw new AppException("oh no! not again!");
}

声明临时String感觉不对
if (badThingsHappen) {
 String m = "oh no! not again!";
 logger.error(m);
 throw new AppException(m);
}

是否可以让Exception的构造函数处理日志记录?有没有更好(更清洁)的方法?

最佳答案

您可以使用实用程序方法:

public class AppException extends Exception {
    public static AppException logAndThrow(Logger logger, String message) throws AppException {
        AppException e = new AppException(message);
        // log the stack trace as well
        logger.error(message, e);
        throw e;
    }
}

并使用它:
if (badThingsHappen) {
    AppException.logAndThrow(logger, "oh no! not again!");
}

关于java - 抛出和记录异常,更好的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10387458/

10-12 16:48