Blog·Tanky WooABOUTTAGSRSS

Rsyslog 到目前的版本(v8) 还没有支持 Log Rotation 功能,不过可以通过其它方式进行一些简单的rotate操作。

简单的实现 Log Rotation 使用的是 OUTPUT CHANNELS

Output channels 通过 $outchannel 命令来定义的,语法格式:

$outchannel name,file-name,max-size,action-on-max-size
  • $outchannel name : 是定义的 outchannel 名称,后面需要使用到
  • file-name : 是用来写入日志的文件名
  • max-size : 是文件允许的最大大小,大小是 Byte
  • action-on-max-size : 当文件大小超过 max-size, 会触发 action-on-max-size 这个命令

注意:

action-on-max-size a command to be issued when the max size is reached. This command always has exactly one parameter. The binary is that part of action-on-max-size before the first space, its parameter is everything behind that space.

action-on-max-size 是一个命令,总是有一个参数。命令的第一个空格之前是执行的命令,空格后面是参数。

上面的命令仅仅是定义了这个 channel, 要使用它,还需要使用一个选择器,选择器包含这个channel名称,channel前面使用输出操作 :omfile:$,例如:

*.* :omfile:$mychannel

这里表示所有的facilities的所有property都是用名叫 mychannel 这个 outchannel 。

注:Output Channels 在以后会被其他方式代替,所以如果升级到以后的版本,要注意是否还支持这个语法,以及是否会有内置更方便的方式。

实例:

# 定义名叫log_rotation的outchannel, 限制文件大小是 104857600, 单位是Byte, 也就是100M。当大小超过100M,则会执行 rm /var/log/t.log。
$outchannel log_rotation,/var/log/t.log,104857600,rm /var/log/t.log 
# 使用这个outchannel, 当程序名以 logrecord 开始。
:programname,startswith,"logrecord" :omfile:$log_rotation 

更详细可以参考: Log rotation with rsyslog

Rsyslog Wiki 还有一个以日期为单位的的 Log Rotation 方式:DailyLogRotation

更强悍的方式是使用 logrotate 工具, 还没有研究过:

*  app-admin/logrotate
      Latest version available: 3.8.7
      Latest version installed: [ Not Installed ]
      Size of files: 57 kB
      Homepage:      https://fedorahosted.org/logrotate/
      Description:   Rotates, compresses, and mails system logs
      License:       GPL-2