温馨提示×

温馨提示×

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

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

如何捕获异常日志

发布时间:2026-07-17 12:45:47 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

捕获异常日志是排查问题、保证系统可维护性的关键。不同语言、不同场景做法不一样,下面按常见语言 + 通用思路给你一个清晰总结。


一、通用思路(先理解)

无论用什么语言,捕获异常日志一般包含 4 步:

  1. 捕获异常(try / catch / except)
  2. 记录异常信息
    • 异常类型
    • 异常信息
    • 堆栈信息(非常重要)
  3. 记录上下文
    • 请求 ID
    • 用户 ID
    • 参数
  4. 输出到合适的地方
    • 控制台
    • 文件
    • 日志系统(ELK、Sentry、Graylog 等)

二、常见语言示例

✅ Java(最常用)

1️⃣ 基础 try-catch + 日志框架(推荐)

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 a = 1 / 0;
        } catch (Exception e) {
            log.error("发生异常,参数:{}", "test", e);
        }
    }
}

重点

  • log.error("msg", e),不要只 e.getMessage()
  • 堆栈信息才能定位问题

2️⃣ 全局异常捕获(Spring Boot)

@RestControllerAdvice
public class GlobalExceptionHandler {

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

    @ExceptionHandler(Exception.class)
    public String handle(Exception e) {
        log.error("全局异常捕获", e);
        return "系统异常";
    }
}

✅ Python

import logging

logging.basicConfig(
    filename='app.log',
    level=logging.ERROR,
    format='%(asctime)s %(levelname)s %(message)s'
)

try:
    1 / 0
except Exception as e:
    logging.exception("发生异常")

logging.exception() 会自动记录堆栈


✅ JavaScript / Node.js

try {
  JSON.parse('abc');
} catch (err) {
  console.error('异常信息:', err.message);
  console.error('堆栈:', err.stack);
}

✅ 生产环境建议用:

  • winston
  • pino
  • Sentry

✅ Go(特殊)

Go 没有异常,用 error + panic

defer func() {
    if r := recover(); r != nil {
        log.Println("panic 捕获:", r)
    }
}()

三、日志应该记录什么(非常重要)

❌ 错误示例:

log.error(e.getMessage());

✅ 正确示例:

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

推荐字段

  • 时间
  • 日志级别(ERROR)
  • 业务描述
  • 关键参数
  • 异常类型 + 堆栈

四、日志输出到哪里?

场景 推荐
本地开发 控制台
生产环境 文件 + 日志系统
微服务 ELK / Loki
前端/后端 Sentry
临时调试 文件

五、常见坑

❌ 吃掉异常(不记录)

catch (Exception e) {}

❌ 只打 message,不打 stack

❌ 日志量过大(疯狂打 ERROR)

❌ 敏感信息进日志(密码、手机号)


六、如果你愿意,我可以帮你

你可以直接告诉我:

  • ✅ 使用语言(Java / Python / JS / Go)
  • ✅ 是否 Web 项目(Spring Boot / Django / Express)
  • ✅ 是本地日志还是集中式日志

我可以给你针对你项目的完整异常日志方案

向AI问一下细节

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

AI