事件的起源
也就是个查询tocmat中日志的事情。之前的一个定时任务在本地测试没有问题,于是放到生产环境中,过段时间貌似没有产生预期的效果。
于是想查看日志看看到底有什么问题。然而,现在问题来了,生产环境中的日志全部打印在默认的文件中,即:{$TOMCAT_HONME}/logs/catalina.out
此文件已大量堆积到现在臃肿到几G的地步。偷偷的百度了下怎么查看文件大小:
1 | ls -lh catalina.out |
对,没有看错,5.2G!!!
事件的经历
- 首先找下是否有文件异常时自定义的一些打印日志,其中 -n 表示显示行号。
1 | [kanms@kanms-web logs]$ grep -n "带附件和图片的邮件发送失败!!!" catalina.out |
- 根据显示的信息及时间然后定位需要查看的日志内容,如查看上面第一次出现后的200行日志
1 | [kanms@kanms-web logs]$ sed -n "65393183,65393383p" catalina.out |
- 通过日志发现原来是发送邮件服务器主机mail.ustcinfo.com不通的问题,但是本地使用同样的主机配置又试了一下可以发送
- 于是在服务器上ping服务器主机不通。
1 | [kanms@kanms-web logs]$ ping mail.ustcinfo.com |
- 网上查阅之后才知道原来linux服务器上发送接收服务器需要安装sendmail包
- 安装后依然无效,可能是配置不正确,目前是把邮箱服务器由域名改成IP
事件后的思考
这里不把重点放在sendmail的安装与配置说明上,主要是提出日志的大小和分类上。
目前的这种打印日志方式存在很多弊端,可以考虑按照以下方式进行修改:
- 按时间分类出文件。比如说一天一个文件,这个使用log4j等日志框架的配置文件即可实现
- 按照日志的级别进行分类出文件。比如ERROR以上的放在一个文件中;INFO级别的放一个文件;异常的放一个文件,这可以在输出的时候需要做处理
- 按日志内容进行分类。比如登录日志放在一个文件,操作某个重保的表格放一个文件等;这些需要在打印日志的时候注意分类,或者自定义一些常用的打印日志级别
以上的只是一些设想,具体以能够把日志明确分开和方便定位日志信息为准则,可以交叉使用上面的规则。