捕获异常日志是排查问题、保证系统可维护性的关键。不同语言、不同场景做法不一样,下面按常见语言 + 通用思路给你一个清晰总结。
无论用什么语言,捕获异常日志一般包含 4 步:
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()@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 "系统异常";
}
}
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() 会自动记录堆栈
try {
JSON.parse('abc');
} catch (err) {
console.error('异常信息:', err.message);
console.error('堆栈:', err.stack);
}
✅ 生产环境建议用:
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);
| 场景 | 推荐 |
|---|---|
| 本地开发 | 控制台 |
| 生产环境 | 文件 + 日志系统 |
| 微服务 | ELK / Loki |
| 前端/后端 | Sentry |
| 临时调试 | 文件 |
❌ 吃掉异常(不记录)
catch (Exception e) {}
❌ 只打 message,不打 stack
❌ 日志量过大(疯狂打 ERROR)
❌ 敏感信息进日志(密码、手机号)
你可以直接告诉我:
我可以给你针对你项目的完整异常日志方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。