Log experience

Post on 27-Dec-2014

287 views 2 download

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