日志是排查和定位异常的核心依据,记录异常时有规范的内容、级别、结构和实践方式。下面从“记什么、怎么记、注意事项、示例”几个角度系统说明。
一条合格的异常日志通常包含以下信息:
时间(timestamp)
2026-01-15 10:23:45.123日志级别(level)
ERROR / FATAL:异常、崩溃WARN:潜在风险INFO:正常流程(可选)异常类型(exception type)
NullPointerException、SQLException异常消息(message)
堆栈信息(stack trace)
上下文信息(context)
线程信息(可选但推荐)
| 级别 | 使用场景 | |----|| | ERROR | 系统异常、接口失败、数据错误 | | WARN | 降级、重试、参数不合法但不致命 | | INFO | 关键流程节点(非异常) | | DEBUG | 开发调试,不进生产 |
try {
orderService.createOrder(order);
} catch (BusinessException e) {
log.error("创建订单失败, orderId={}, userId={}",
order.getId(), userId, e);
}
✅ 正确做法:
e 作为最后参数❌ 错误做法:
log.error("出错了");
log.error(e.getMessage()); // 丢失堆栈
import logging
logging.error("查询用户失败 user_id=%s", user_id, exc_info=True)
只记异常不够,要能复现问题:
ERROR 创建订单失败
orderId=12345
userId=888
traceId=abc-def-ghi
MDC(Java)、OpenTelemetrytry {
...
} catch (Exception e) {
// ❌ 什么都没做
}
❌ 不要记录:
✅ 记录:
phone=138****12342026-01-15 10:23:45.123 [http-nio-8080-exec-3] ERROR
c.x.order.service.OrderService - 创建订单失败
traceId=abc123
userId=888
orderId=10001
java.lang.NullPointerException: order.address is null
at com.x.order.service.OrderService.createOrder(OrderService.java:88)
at com.x.order.controller.OrderController.create(OrderController.java:45)
异常日志 = 时间 + 级别 + 异常 + 堆栈 + 业务上下文
如果你用的是某种具体技术栈(Java / Python / Go / Node / 微服务),我可以给你更针对性的日志规范或模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。