项目都需要输出日志,用于反应系统运行状态或者数据统计。以下内容是个人在服务端系统日志数据的一些经验。
1、日志存储位置要统一
对于单个项目,日志放在什么位置并不是特别重要,只要有足够存储空间就行。但是对于工程化的项目,日志存储位置非常重要。公司一般都有统一的运维团队,各个业务系统产生的日志都需要交给运维团队维护。因此,所以系统日志都遵循一个统一的存放路径规则很重要,运维团队可以方便的进行日志的监控、抓取、转移及删除。项目组成员也知道去哪里查找日志。
建议日志存储位置 /aaa/bbb/项目英文名/
不同工程的日志,都放在目录/aaa/bbb/下,以项目英文名称做项目日志存放目录。
2、日志需要分级
日志最好按照info,warn,error不同级别分文件存储。比如info级别日志存储到info.log文件,warn级别日志存储到warn.log文件,error级别日志存储到error.log文件。分别存储的好处是,查看日志文件时,能很容易发现系统是否出现异常或错误日志(正常情况下,info日志很多,warn,error日志相对较少)。
实际操作中,我在info.log日志中也输出warn和error的日志。
3、日志需要分段
日志文件会随着时间的推移不断增大。文件过大,对文件的检索、查询等操作都会变得缓慢,另外磁盘也不能无限制的存储文件。因此日志需要分段存储。常见的做法按天分割日志。比如 info.2017-08-20.log表示8月20日生成的日志。
4、日志存储和归档
服务器的磁盘不用保存系统的所有日志。一般服务器上保存15天的日志(根据实际业务确定),其他的日志可以转移到别的地方存储,比如HDFS。
5、日志内容格式尽量规范
日志后续会用于分析或统计。如果有规范的格式,后续分析统计功能处理起来要方便得多。比如日志格式为 key1=value1 key2=value2 key3=value3 ……后续甚至可以开发一个统一的统计分析系统,只需要简单配置就能分析统计日志。
6、分布式环境下日志可追溯
日志的另一个功能是排查定位问题。在分布式系统中,由于服务部署节点非常多,一个请求调用链较长,如何通过日志跟踪某次请求的调用路径非常重要。可以在每次请求入口生成一个唯一的uuid,分布式调用的每个环节都将这个uuid往下传,每个分布式节点都将uuid输出到日志。所有分布式节点,相同uuid的日志就构成了一次请求的全过程。
有了这个设计,可以很轻松定位分布式环境下的问题。