首页 > 代码库 > logrotate日志不轮转呢?_新日志size0
logrotate日志不轮转呢?_新日志size0
程序,要管理log,留作日后的后续功能处理和统计和领导需要。因为懒得写,所以直接用了syslog函数,把log交给rsyslog去写了。然后用logrotate每天做日志轮转。 两种log分别发送到了local6.info和local6.notice。 #define logInfo(...) pthread_mutex_lock(&logLock);\ logLen=snprintf(logBuf,sizeof(logBuf),__VA_ARGS__);syslog(LOG_INFO,logBuf,logLen);pthread_mutex_unlock(&logLock) #define logUpload(...) pthread_mutex_lock(&logLock);\ logLen=snprintf(logBuf,sizeof(logBuf),__VA_ARGS__);syslog(LOG_NOTICE,logBuf,logLen);pthread_mutex_unlock(&logLock) ... openlog("zhuowang_SS",LOG_PID|LOG_CONS,LOG_LOCAL6); ... 在/etc/rsyslog.conf里添加了 local6.info /var/log/zw_info.log local6.notice /var/log/zw_notice.log 在/etc/logrotate.d/建新文件zw_log [root@localhost logrotate.d]# cat zw_log /var/log/zw_notice.log /var/log/zw_info.log { nocompress daily rotate 21 } 意为他俩不压缩、每天轮转、保留21份。 但是运行却发现每天虽然在生成新日志文件,但是日志还是被写到旧文件里去。好好研究了一下发现这错误犯的真2,rsyslog和logrotate根本就是两个软件包两回事嘛。虽然logrotate重命名了当前log,删了旧log,但是rsyslog不知道哇,打开的文件还是旧文件嘛。当然写的就是旧文件了嘛。 经探索后发现这个问题有两种解决办法。 1.copytruncate,拷贝后截断。 把当前log拷贝后截断。可以理解为把内容拷贝走作为备份,然后清空当前文件。但是这有一个问题就是拷贝和截断之间会有时间差,存在丢数据的可能。 2.给rsyslog发信号。重新打开log文件。 在/etc/logrotate.d/zw_log里添加 sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript postrotate表示在日志轮转后执行 sharedscripts表示zw_notice.log、zw_info.log两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次
logrotate日志不轮转呢?_新日志size0
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。