做过一段时间应用程序开发,现在对应用日志维护有一些疑问,我说下我经历的一些历程。
无日志,只记录到tomcat的catalina.out 优点:方便 缺点:太大,查询会慢
按时间记录日志 每天一个log(所有级别的日志在一个文件) 最大保存15天内日志 优点:方便查询,哪一天出问题了,就直接查哪个文件 缺点:日志文件大小不均衡 不易控制总大小 可能某个文件很大 其他文件很小 可能会硬盘爆掉
按固定大小记录日志 每个大小例如 100M 优点:便于控制日志总大小 缺点:查哪一天的日志稍微麻烦点
按时间分文件夹,然后再按固定窗口滚动 优点:可以控制日志总大小,也方便根据日志查找 缺点:目录结构复杂 放入集中式日志分析系统中 需要遍历里面所有可能的文件 觉得会影响效率 优点:可能更方便点
按时间分文件夹,再按日志级别分为error.log,info.log,debug.log,warn.log 然后 每个文件再固定大小窗口滚动 缺点:目录结构复杂 优点:可能更方便点
同上,但是debug.log里会有info.log和error.log ,info.log里会有error.log 类似责任链
我的理想:
维护简单
效率高
日志简洁,有效数据
日志总量可以控制,因为硬盘大小有限
还有一个疑惑
日志级别的输出,生产上应该是info更好么?那这里应该输出哪些内容比较好,目前我是输出的接口调用返回值,以及该接口用到的SQL语句,我觉得SQL语句 有点没必要输出,但是组内人,认为可以方便定位问题,我觉得也没错,目前在配合ELK分析tomcat日志,所以想把这日志一块规范一下,想请教下大家,使用过程的一些经验和心得,谢谢了,不胜感激!
说下我这边的配置:
a.生产环境ERROR,
b.测试环境DEBUG,
c.业务相关的统计上报日志会走udp,上报到指定的日志服务器,做离线日志分析和定时入库,提供给运营侧使用。不会跟程序的执行log打在一起。