/etc/rsyslog.conf
指令格式
$outchannel
Name:指定outchannel的名字
File_Name:指定日志存储的位置
Max_Size:日志的最大值,单位为byte
Action:当满足条件后,执行的动作,删除,移动,等
例子:
$outchannel log_rotation, /var/log/test.log, 100000, /root/log_rotation_script
*.* /var/log/test.log
touch /var/log/test.log
/root/log_rotation_script
#!/bin/bash
mv_date=$(date +%Y-%m-%d_%H:%M)
mv /var/log/test.log{,.$mv_date}
touch /var/log/test.log
kill -HUP `cat /var/run/syslogd.pid`
/etc/init.d/rsyslog reload
试着重启系统看看吧,因为重启系统可以获得大量的日志信息

我们还可以编写更为复杂一点儿的脚本,用于日志滚动像只保留前几次的这种,不过在rsyslog 6及以后就不支持outchannel这种方式了
linux还给我们提供了更为简便的工具,logrotate
2. logrotate
Logrotate软件包含定时任务,他会根据/etc/rotate.conf和/etc/rotated.d/中的配置文件自动的滚动日志。
logrotate.conf是全局配置文件,logrotate.d目录里是具体的某个实例配置
logrotate指令是根据以上配置去执行日志滚动的,在/etc/cron.daily目录里有一个logrotate的脚本,所以每天都会执行一次,如果我们的执行间隔要小于一天,就自己去用cron
去执行logrotate指令


具体参数可以 man 5 logrotate.conf
这里我们定义message里的err的日志进行滚动
/etc/rsyslog.conf
:msg, contains, "error" /var/log/test_logs/msg_err.log
在/etc/logrotate.d/msg_err
/var/log/test_logs/msg_err.log {
daily
size 2k
create 0644 root root
rotate 3
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
重新加载rsyslog,我们前面说过cron会每天才执行logrotate指令去滚动日志,我们可等不了,就自己写cron任务计划
* * * * * /usr/sbin/logrotate /etc/logrotate.d/msg_err >/dev/null 2>&1
logrotate指令是根据以上配置去执行日志滚动的,在/etc/cron.daily目录里有一个logrotate的脚本,所以每天都会执行一次,如果我们的执行间隔要小于一天,就自己去用cron
去执行logrotate指令

具体参数可以 man 5 logrotate.conf
这里我们定义message里的err的日志进行滚动
/etc/rsyslog.conf
:msg, contains, "error" /var/log/test_logs/msg_err.log
在/etc/logrotate.d/msg_err
/var/log/test_logs/msg_err.log {
daily
size 2k
create 0644 root root
rotate 3
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
重新加载rsyslog,我们前面说过cron会每天才执行logrotate指令去滚动日志,我们可等不了,就自己写cron任务计划
* * * * * /usr/sbin/logrotate /etc/logrotate.d/msg_err >/dev/null 2>&1