后端日志系统

一、日志级别不是摆设

刚入行那会儿觉得日志随便打打就行,后来被线上问题教做人了。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个!所以上线前必须用安全扫描工具过一遍!

总结

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

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

相关推荐
聊天QQ:688238863 小时前
基于Matlab/simulink的插电式混合动力汽车建模仿真模型4驱PHEV,实现P2P4发...
wireshark
伞啊伞9 小时前
nginx https ssl证书
nginx·https·ssl
2501_9418072612 小时前
智慧金融平台中的多语言语法引擎与实时风控策略实践
eureka
X***C86212 小时前
springcloud-eureka与gateway简易搭建
spring cloud·eureka·gateway
cong_han12 小时前
【Lua】WireShark抓包
网络安全·wireshark·lua
4***v2141 天前
使用 Certbot 为 Nginx 自动配置 SSL 证书
运维·nginx·ssl
2501_941089191 天前
新一代异构分布式环境中多语言微服务自适应扩展与智能调度实践探索与优化方法论研究报告
eureka
2501_941146321 天前
物联网与实时数据监控:Python与Go实现智能家居系统
eureka
T***u3331 天前
PHP在电商中的会员管理
开发语言·wireshark·php·ue4·jina