Log experience
description
Transcript of Log experience
⽇日志重构⼀一些⼼心得陈宗志
⽇日志是什么
• ⽇日志⽤用来记录系统运⾏行的状态, ⽤用户的⼀一些操作. 是系统⼀一个重要组成部分
要求
• 不能因为打印⽇日志影响服务性能
• 看到出错⽇日志⽴立刻系统哪⾥里出问题
不能太多, 不能太少
“看到⽇日志⽴立刻知道系统哪⼀一个模块出问题”
解决⽅方案
• ⽇日记分级别
• 线上⽀支持动态⽇日志级别调整
• 每⼀一个请求从客户端到 Server 端有⼀一个唯⼀一的 Id
⽇日志级别• Debug
• Trace
• Info
• Warn
• Error
• Fatal
Debug
• ⽤用来程序员本⾝身在调试代码的时候写的⽇日志, 默认是不开启的
Trace
• ⽤用来记录程序某些流程的执⾏行, 在调试的时候使⽤用, 默认是不开启的.
• Trace 与 Debug不同在于线上出问题的时候, 我们可以开启Trace⽇日志, Trace⽇日志必须有助于我们定位问题. ⽽而不会去开启Debug⽇日志, 因为Debug⽇日志默认只是写这⼏几⾏行代码的⼈人看的
Info
• ⽤用来记录每⼀一个的初始化的过程, 或者⼀一个请求的访问. 主动的告诉我们服务是否正常运⾏行.
• ⽐比如在Bada⾥里⾯面, Bada启动的过程会记录Info ⽇日志, 每⼀一个客户端请求会记录⼀一条Info⽇日志.
Warn
• ⽤用来记录服务出现问题, 但是这个问题不是由于服务本⾝身的问题⽽而产⽣生的, ⽽而是由于⼀一些参数错误产⽣生, 或者有些⺫⽬目录不存在. 产⽣生Warn⽇日志的时候, 默认是不会影响我们的服务, 影响的只是这⼀一个请求.
• 在Bada⾥里⾯面, ⽐比如bada_manager:init_db 的时候, 传参数没有传⼊入是否⽀支持版本号.
Error
• ⽤用来记录服务端出现了问题了, ⽽而且这个问题对我们的服务造成了影响, 服务端可能压⼒力特别⼤大了. 我们必须⻢马上上去查看有什么问题.
• ⽐比如在Bada⾥里⾯面, newBinLogFile 的时候⽆无法⽣生成⼀一个新的Binlog, 或者我们bada_kv 的message queue 超过的⼀一定的⻓长度, 这个时候可以服务, 但是对服务影响是特别⼤大的.
Fatal
• 表⽰示我们的服务出现⼤大问题了, 或者这个是我们服务Down掉之前打出的⽇日志. 打出这个⽇日志的时候⼀一般服务已经挂掉, 或者挂掉⼀一部分了.
• ⽐比如在Bada⾥里⾯面, Binlog Merge的时候需要Merge 超过1000000 条⽇日志的时候是⽆无法Merge的. lerder在找同步点的时候, 找不到同步点.
Request ID
• 为什么需要?
Request ID
• ⺫⽬目前Request ID 是客户端的 hostname:port
Tips
• ⽇日志虽然是⼩小事, 需要认真对待
• 关于⽇日志级别, 没有对错, 但要团队有明确的规定, 什么样的错误打⼊入什么级别⽇日志
• ⽇日志需要不断的调整, 努⼒力做到完美⽇日志
• ⽇日志格式⼀一定要统⼀一, 便于处理
Thanks