后端日志系统

一、日志级别不是摆设

刚入行那会儿觉得日志随便打打就行,后来被线上问题教做人了。DEBUG/INFO/WARN/ERROR这几个级别真得琢磨清楚:

DEBUG:比如循环里每条数据的状态跟踪,记得一定要用isDebugEnabled()包起来,否则字符串拼接能给你性能干崩

INFO:关键业务流程节点必须留痕,比如"用户158支付订单完成,金额299"

WARN:别人调我接口参数传错这种,不能算错误但要监控

ERROR:捕获异常时务必带上上下文参数,别光打e.getMessage()

(掏心窝子)见过最坑的是把第三方接口超时打成INFO的,监控告警完全没触发,半夜被叫起来扩容数据库!(捂脸)

二、日志输出得讲武德

格式规范:时间戳+级别+线程名+类名+业务ID这五大金刚不能少。推荐用JSON格式,ELK收集起来那叫一个丝滑

异步写入:同步写日志阻塞业务线程的惨案年年有。Logback的AsyncAppender配置队列大小2048起步,discardingThreshold设为80防止内存溢出

日志分离:

(突然激动)前两天发现个骚操作:有人把MyBatis的SQL日志打到单独文件,结果磁盘三天写满!切记要设置maxHistory和totalSizeCap啊兄弟们!

三、追踪链路不能丢

现在都是分布式系统,一个请求经过十几个服务:

在过滤器里生成traceId塞到MDC

RPC调用时通过header传递

线程池场景要用TTL做线程间传递

最终在日志配置里统一添加%X{traceId}

(敲黑板)特别注意:MDC用完一定要clear!上次有个兄弟忘记清理导致traceId串到其他请求,查问题查得差点怀疑人生!

四、日志收集有讲究

ELK三板剑搭建起来之后:

Filebeat配置多行合并(异常堆栈必须合并处理)

Logstash管道里用grok解析复杂格式

ES索引按周创建,别傻乎乎按月创建(查询速度差三倍)

Kibana做统计看板:错误数TOP10接口、慢查询趋势图必备

(压低声音)说个真实案例:某电商大促时日志量暴涨,Kafka集群被日志灌崩,连带订单服务雪崩。所以一定要给日志Topic单独配置集群!

五、实战避坑指南

日志位置:别写根目录!放专属挂载盘,iops单独监控

参数占位:("订单{}金额异常", orderId) 比字符串拼接性能提升40%

敏感信息:身份证/手机号必须脱敏,正则替换一步到位

日志清理:crontab里写find -mtime +7 | xargs rm -f 这种骚操作会误删!用logrotate配压缩策略

(突然严肃)最后说个血的教训:某金融公司日志打了用户银行卡密码!虽然很快就删了,但审计过来直接罚了200个!所以上线前必须用安全扫描工具过一遍!

总结

好的日志系统就像行车记录仪,平时觉得占空间,出事时就是救命稻草。建议大家每个月做一次日志复盘,看看哪些该打的没打,哪些不该打的瞎打。记住:日志打得好,加班加到老(划掉)故障追得少!(狗头保命)

(举手)下次想听什么实战技巧?评论区告诉我,安排!

相关推荐
野指针YZZ1 天前
TCP包 wireshark抓包分析-RK3588
网络·tcp/ip·wireshark
北极熊555552 天前
Dify 服务启动一直转圈失败问题排查与解决
云原生·eureka·dify·windows用docker
成空的梦想2 天前
ZLibrary反爬机制实战分析的技术文章大纲
网络协议·https·ssl
CN.LG2 天前
抓包工具 Wireshark 是什么?
网络·测试工具·wireshark
0w0不秃头程序猿2 天前
guide哥AI智能面试项目部署过程
云原生·eureka
linux修理工3 天前
EasyVoice 项目部署与使用指南(开源文字互转声音)
云原生·eureka
邓草3 天前
Ubuntu修改docker数据目录的方法
ubuntu·docker·eureka
BUG胡汉三3 天前
Java内网代理访问HTTPS接口SSL证书不匹配
java·https·ssl
Anthony_CH3 天前
window系统无虚拟化安装Docker的方式
docker·容器·eureka
小王不爱笑1324 天前
从 Servlet 生命周期到 Tomcat 执行原理:Web 服务的底层逻辑全解析
eureka