为啥么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两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次。

然后问题就解决啦,程序改动出奇的小,每天有新文件生成,定期处理下超14天的内容。超21天的log会被自动删除。^o^ 成功向四个现代化迈近一小步。



本文转自 Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1704463

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
100 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
49 0
|
存储 Unix Linux
CentOS7下日志轮转logrotate简单入门与实践
CentOS7下日志轮转logrotate简单入门与实践
354 0
CentOS7下日志轮转logrotate简单入门与实践
|
3月前
|
存储 监控 Ubuntu
日志切割工具-Logrotate实现nginx日志切割
日志切割工具-Logrotate实现nginx日志切割
37 0
|
4月前
|
Linux
linux下实现日志切割的两种方法 logrotate
linux下实现日志切割的两种方法 logrotate
131 0
|
4月前
|
机器学习/深度学习 算法
【LeetCode刷题日志】189.轮转数组
【LeetCode刷题日志】189.轮转数组
|
9月前
|
存储 监控 Ubuntu
日志切割工具-Logrotate实现nginx日志切割
日志切割工具-Logrotate实现nginx日志切割
161 0
|
10月前
|
Linux 开发工具
Linux日志管理logrotate日志轮转
上篇文章学习了系统日志管理,对于日志来讲他是占内存的,当有大量的日志产生的时候,会有一天占满我们的内存,所以出现了日志轮转,轮转日志会删除时间久远的日志,来节省空间,这篇文章就是带大家了解学习日志轮转,通过本篇文章了解日志轮转的相关配置文件,学习怎么配置日志轮转,根据我们的需求进行配置,下面来进行学习吧。
144 0
|
11月前
|
Linux
linux下如何使用logrotate进行日志的切分
linux下如何使用logrotate进行日志的切分
8987 0
|
11月前
|
NoSQL Linux MongoDB
一日一技:使用 Linux 自带的 logrotate 管理你的所有日志
一日一技:使用 Linux 自带的 logrotate 管理你的所有日志
183 0

热门文章

最新文章