温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Logger 如何打印异常

发布时间:2026-09-12 09:29:01 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java 中,使用 Logger(如 java.util.logging.Logger 或常用日志框架如 Log4j / SLF4J) 打印异常时,关键是不要把异常当成普通字符串拼接到消息里,而是把异常对象作为参数传给日志方法,这样才能打印完整的堆栈信息。

下面分几种常见情况说明。


一、java.util.logging.Logger(JDK 自带)

✅ 正确方式(推荐)

import java.util.logging.Logger;

private static final Logger logger = Logger.getLogger(MyClass.class.getName());

try {
    // 可能抛异常的代码
} catch (Exception e) {
    logger.log(LoggerLevel.SEVERE, "发生错误", e);
}

输出示例:

严重: 发生错误
java.lang.NullPointerException
    at com.example.MyClass.test(MyClass.java:20)
    ...

❌ 错误方式

logger.severe("发生错误: " + e.getMessage());

这样 只会打印异常信息,不会打印堆栈


二、Log4j / Log4j2

Log4j

import org.apache.log4j.Logger;

private static final Logger logger = Logger.getLogger(MyClass.class);

try {
    ...
} catch (Exception e) {
    logger.error("发生错误", e);
}

Log4j2

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static final Logger logger = LogManager.getLogger(MyClass.class);

try {
    ...
} catch (Exception e) {
    logger.error("发生错误", e);
}

三、SLF4J(最常用,推荐)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

try {
    ...
} catch (Exception e) {
    logger.error("发生错误: {}", "参数说明", e);
}

⚠️ 注意:

  • {} 只能用于 消息参数
  • 异常必须作为最后一个参数传入,不能放进 {}

四、打印异常 + 自定义信息(进阶)

logger.error("用户 {} 操作失败", userId, e);

等价于:

logger.error("用户 " + userId + " 操作失败", e);

五、常见坑总结

写法 是否打印堆栈 说明
logger.error(e.getMessage()) 只打印信息
logger.error("error: " + e) 只调用 toString
logger.error("error", e) ✅ 正确
logger.error("error {}", e) 错误用法

六、结论(记住一句话)

打印异常时,一定把 Throwable 作为日志方法的最后一个参数传入,而不是拼接到字符串里。

如果你用的是某个具体日志框架(如 Logback、Log4j2),可以告诉我,我可以给你更具体的配置示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI