先贴个鸟哥的链接
syslogd :记录登录文件的服务:
以前叫syslogd,现在叫rsyslogd了。
配置文件:
-
/etc/rsyslog.d/local7.conf
-
local7.* /var/log/local7.log
好像需要重启服务才生效。
service rsyslog restart
不知kill -HUP `pgrep rsyslogd`管不管用。
写入日志:
-
import syslog
-
syslog.openlog('test', syslog.LOG_PID, syslog.LOG_LOCAL7)
-
syslog.syslog(syslog.LOG_DEBUG, 'sleep1')
-
syslog.closelog()
日志轮转:
使用logrotate命令。执行logrotate命令后,logrotate会读取配置文件,根据配置文件中设置的轮转规则,
检查日志文件,判断是否满足轮转条件。
配置文件是/etc/logrotate.conf及
/etc/logrotate.d/*
-
/etc/logrotate.d/test
-
/var/log/local7.log {
-
rotate 12 #保留最近12个日志
-
daily #每天滚动
-
size 100 #达到100字节就滚动
-
notifempty
-
dateext
-
dateformat -%Y%m%d #文件名后缀
-
copytruncate #把当前日志copy成备份日志并把当前文件截断。
-
}
关于copytruncate做进一步说明。
日志轮转主要有两种方式,一种是把原文件改名,再创建一个新文件,例如
a.log (i-node为n)
轮转后,变为
a.log (i-node为m)
a.log.1 (i-node为n)
另一种方式,把原文件内容copy一份,生成备份文件,再把原文件截断,例如
a.log (i-node为n)
轮转后,变为
a.log (i-node为n, 截断为0字节)
a.log.1 (i-node为m)
当应用程序正在打开日志文件时,文件描述符不会随文件名改变而改变。
也就是说,在第一种方式(改名并创建)下,轮转后,应用程序仍然向原文件(即a.log.1)写入。
对于rsyslogd来说也是如此,所以轮转后需要执行kill -HUP `pgrep rsyslogd`通知rsyslogd重新打开日志文件。
对于第二种方式,copy需要花一点时间,而可能造成部分日志丢失。
阅读(1614) | 评论(0) | 转发(0) |