温馨提示×

温馨提示×

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

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

java异常如何记录日志

发布时间:2026-09-15 22:11:48 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 中记录异常日志,核心目标是:把异常信息完整、准确地记录下来,便于排查问题。下面从常见方式、最佳实践和示例三个层面说明。


一、常见日志记录方式

1. 使用日志框架(推荐 ✅)

不要直接用 System.out.println(e),应使用日志框架:

  • Log4j / Log4j2
  • SLF4J + Logback(最常用)
  • java.util.logging(JDK 自带,较少用)

2. 错误示例(不推荐)

try {
    // 业务逻辑
} catch (Exception e) {
    e.printStackTrace(); // 不推荐
}

问题:

  • 输出到控制台,难管理
  • 生产环境无法集中收集

二、正确记录异常的方式(重点)

✅ 1. 使用日志框架记录异常(自动带堆栈)

private static final Logger log = LoggerFactory.getLogger(OrderService.class);

try {
    // 业务代码
} catch (Exception e) {
    log.error("订单处理失败", e);
}

关键点:

  • 第二个参数传 Throwable
  • 日志框架会自动打印 异常类型和完整堆栈

✅ 2. 记录上下文信息(非常重要)

不要只记异常,要记“发生了什么”:

log.error("创建订单失败,userId={}, orderId={}", userId, orderId, e);

✅ 3. 不要吞掉异常

❌ 错误:

catch (Exception e) {
    log.error("error");
}

✅ 正确:

catch (Exceptione) {
    log.error("xxx失败", e);
    throw e; // 或封装后抛出
}

三、常见日志框架示例

1. SLF4J + Logback

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

public class Demo {
    private static final Logger log = LoggerFactory.getLogger(Demo.class);

    public void test() {
        try {
            int i = 1 / 0;
        } catch (Exception e) {
            log.error("计算异常", e);
        }
    }
}

2. Log4j2

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

private static final Logger log = LogManager.getLogger();

用法完全一致。


四、异常日志最佳实践总结

该做的

  • 使用日志框架
  • 记录异常 + 业务上下文
  • 异常向上抛出或明确处理
  • 生产环境开启 ERROR / WARN 日志

不要做的

  • e.printStackTrace()
  • 空 catch
  • 只记录 e.getMessage()
  • 在循环里疯狂打异常

五、进阶建议(可选)

  • 使用 MDC 记录 traceId(微服务排查)
  • 异常分类:业务异常 vs 系统异常
  • 接入 ELK / 日志平台

如果你有具体场景(如 Spring、微服务、异步线程),我可以给你更针对性的示例。

向AI问一下细节

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

AI