resin4.0 日志添加滚动压缩功能
不知道什么原因,公司用的web服务器是resin,而不是我们熟知的tomcat,我对resin不是很了解,而且resin相关的资料在网上也很难查得到。近段时间,被resin日志给恶心到了。我们的服务业务量比较多,单个服务的日志经常一天就是100多G,而对于一些不是特别重要的日志,我们采取服务器保存历史日志的方式,而不是用日志收集器去收集。但是这个日志量肯定都保存不了几天的日志。
上服务器查看发现,resin的log目录下面,都是很多jvm-app-0.log**这样的日志,而且都是没有压缩的,单个文件的大小在70M左右。每次磁盘满了都要上去手动清理,或者写个定时器脚本去清理,但是这样清理太频繁了,而且也没法保存几天的日志,日志量太大了。
于是想起了压缩日志的做法,但是由于对resin的不熟悉,所以只能到网上查阅资料了。
(resin的官网好像很不友好的样子)
在网上查阅各种资料后,终于得出了一点儿眉目了,下面记录下这次的修改过程。
1.注释原有日志配置
resin4.0的配置在conf/resin.xml里面。
注释掉如下几行:
<log-handler name="" level="all" path="stdout:"
timestamp="[%y-%m-%d %H:%M:%S.%s]"
format=" {${thread}} ${log.message}"/>
<logger name="" level="${log_level?:'info'}"/>
<logger name="com.caucho.java" level="config"/>
<logger name="com.caucho.loader" level="config"/>
2.添加自定义日志配置
在<cluster id="app">
标签里面(如果不知道在哪里加,就看你原来的配置中host 标签在哪里,直接加到跟host同级那里就行了,我就是这么找的)加入如下配置:
<host id="" root-directory=".">
<web-app id="/" root-directory="webapps/ROOT"/>
<stdout-log path='./log/jvm-app-0.log'
archive-format="jvm-app-0-%Y%m%d.%s.log.gz"
rollover-period='1D'
rollover-size='5mb'/>
<stderr-log path='./log/stderr.log'
archive-format="stderr-%Y%m%d.%s.log.gz"
rollover-period='1D'
timestamp='[%Y/%m/%d %H:%M:%S.%s] '
rollover-size='5mb'/>
<access-log path='./log/access.log'
archive-format="access-%Y%m%d.%s.log.gz"
rollover-period='1D'
rollover-size='5mb'/>
</host>
3.配置解析
stdout-log
:控制台日志
stderr-log
:错误日志
access-log
:访问日志
path
:正在打印的日志路径
archive-format
:压缩备份的日志文件名称,后面加上.gz就会自动压缩了,如果不加就不会压缩。
rollover-period
:多久滚动一次日志,(15D)15天, weeks (2W)2周, months (1M)1个月, or hours (1h)1小时
rollover-size
:日志文件达到多大就开始滚动压缩(不一定是达到了这个大小才开始滚动的,有可能会大一些才开始滚动压缩,而且滚动压缩有可能会丢失日志)
这样配置完之后,磁盘空间就很充足了,也不用隔几天就上去清理日志了。