像日志的这样的小细节,在开发过程中常常被忽略。除了区分级别外,日志的输出内容通常处理地很随意。而实际上日志在监控系统行为,排错,性能优化,安全审计等方面扮演着重要的角色。
总体上说一份良好的日志应该符合一个特性:greppable。grep是unix/linux系统上一个很强大的工具,它能够从文件中找出匹配某个正则表达式的所有行。也就是说良好的日志文件应该能够让日志分析工具在庞大的日志数据里很容易很精准地定位到所需要的信息。
至于如何才算greppable,还得看具体的分析需求,总结一下考虑的因素大概有以下几个方面:
一、what to log? 需要纪录哪些信息
错误信息,核心性能数据,用户行为数据,安全验证信息等等,要根据将来需要对日志做哪些分析来选择纪录相应的数据
二、log design
1、单独的日志信息要纪录在一行数据里面,因为像grep之类的工具无法跨行匹配,如果一条日志信息会跨行的话,会加大日志分析的难度
2、日志要纪录分析所需的必要信息,并且要避免冗余,与其它无关的信息区分开来,方便分析工具快速定位核心信息
3、日志文件要分级与模块化,不同的模块对应不同的日志文件,易于快速定位问题
总结:好的日志应该准确纪录系统的行为,而且在内容与格式上是grep-friendly,能够让日志分析工具在庞大的日志文件里很容易很精准地定位到所需要的数据