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

[[email protected] 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两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次
时间: 2024-08-15 09:20:15

logrotate日志不轮转呢?_新日志size0的相关文章

现代软件工程团队项目贝塔阶段_开发日志_2018.01.15-2018.01.19

现代软件工程团队项目贝塔阶段_开发日志_2018.01.15-2018.01.19 2018.01.15 已完成: 1.版本上线 1.1上线操作步骤 1.1.1将网站整体文件夹拷贝到keqi1 1.1.2修改microDefinition.php的数据库名和根目录名 1.1.3修改注册界面发送验证码后直接填充功能 1.1.4修改del的主id的class为hide 1.1.5重新运行根目录的111.php(消除红点,也就是消除服务器返回的多余字符) 1.2修复上线过程中遇到的bug  1.2.1

使用log4j2打印Log,log4j不能打印日志信息,log4j2不能打印日志信息,log4j和logj2,idea控制台信息乱码(文末)

说来惭愧,今天就写了个"hello world",了解了一下log4j的日志. 本来是想在控制台打印个log信息,也是遇到坎坷重重,开始也没去了解log4j就来使用,log4j配置文件开始用的log4j.properties,结果控制台一直打印ERROR StatusLogger No log4j2 configuration file found.也就是Log4j2配置文件没找到的意思. 我就把log4j.properties文件名改成log4j2.properties,结果不报错了

日志和告警数据挖掘经验谈——利用日志相似度进行聚类,利用时间进行关联分析

摘自:http://www.36dsj.com/archives/75208 最近参与了了一个日志和告警的数据挖掘项目,里面用到的一些思路在这里和大家做一个分享. 项目的需求是收集的客户系统一个月300G左右的的日志和告警数据做一个整理,主要是归类(Grouping)和关联(Correlation),从而得到告警和日志的一些统计关系,这些统计结果可以给一线支持人员参考. 得到的数据主要分为两部分,一部分是告警的历史数据,这部分数据很少,只有50M左右,剩下的全部都是日志数据.日志数据大概有50多

基于mariadb的日志服务器及用loganalyzer实现日志的管理分析

日志文件和相关服务进程 日志文件用来记录系统,服务等在运行过程中发生的事件,事件发生的时间及事件的关键性程序.这些记录的信息在服务器运行出现问题时用来查看分析,以便解决问题.在Linux上,日志的记录一般有两种方式,一种是由软件自身完成自身运行状态的记录,例如httpd:另一种是由Linux上提供的日志文件管理系统来统一管理.运行的软件只需要调用这个管理系统中的相关服务,即可完成日志的记录.rsyslog就是这样的一个日志文件管理系统. rsyslog内置了很多facility,这个可以理解为服

SQL Server中的事务日志管理(7/9):处理日志过度增长

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 这篇文章会列出导致事务日志过度增长的常见的问题和错误管理形式,包括: 在完整恢复模式里,没有进行日志备份 进行索引维护 长时间运行或未提交的事务阻止事务日志里空间重用 当然,如果增长没检查,日志文件会扩展直到吞没所有可用磁盘空间或日志文件的最大大小,在这个时候你

SQL Server中的事务日志管理(1/9):事务日志概况

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 事务日志是存储对应数据库所有事务和数据修改记录的文件(每个数据库都有对应的日志文件).在造成SQL Server意外关闭的灾难事件里,例如实例或硬件故障,事务日志用来恢复数据库,用来保证数据的完好无损(完整性).在重启前,数据库进入恢复过程,事务日志被读取保证所

SQL Server中的事务日志管理(3/9):事务日志,备份与恢复

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 它不会经常提起,除非你的数据库运行在简单(SIMPLE)恢复模式,在事务日志上定期备份非常重要的.这会控制事务日志大小,并且保证,在灾难发生里,你可以恢复你的数据库到灾难发生前的某个时间点.这些日志备份要和定期的完整数据库(数据文件)备份一起. 如果你在测试数据

linux命令:syslog日志服务-系统缩减之增加日志服务功能

syslog 服务:     syslogd:系统日志服务,非内核产生的信息     klogd:内核日志服务,专门负责记录内核产生的日志信息   service syslog restart 重启日志服务   service syslog reload  不重启日志服务使得日志服务配置文件立即生效 配置文件:/etc/syslog.conf 配置文件格式:facility.priority action  #facility谁产生的日志,priority所产生的那   种   级别的日志,ac

SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 这个标题有点用词不当,因为运行在大容量日志恢复模式里的数据库,我们通常是长期不管理日志.但是,DBA会考虑在大容量加载时,短期切换到大容量恢复模式.当数据库在大容量模式里运行时,一些其他例如索引重建的操作会最小化日志(minimally logged),因此在日