使用Logrotate 管理glog生成的日志文件
1,Logrotate的配置文件(log-test)放在/etc/logrotate.d/下
2,强制执行logrotate的命令是logrotate -vf /etc/logrotate.d/log-test 其中log-test是配置的配置文件
其中配置如下
/home/hgy/projects/glog_test/*.log{
size 20M
rotate 3
compress
dateext
dateformat %Y%m%d%s
delaycompress
missingok
copytruncate
notifempty
}
size和minsize以及maxsize设置虽说在官方文档中显示有用,即日志文件达到一定大小就处理,但是logrotate没有实时地对文件大小进行监控
maxsize size
Log files are rotated when they grow bigger than size bytes even before the additionally specified time interval (daily, weekly, monthly, or yearly). The related size option is similar except that it is mutually exclusive with the time interval options, and it causes log files to be rotated without regard for the last rotation time. When maxsize is used, both the size and timestamp of a log file are considered.
minsize size
Log files are rotated when they grow bigger than size bytes, but not before the additionally specified time interval (daily, weekly, monthly, or yearly). The related size option is similar except that it is mutually exclusive with the time interval options, and it causes log files to be rotated without regard for the last rotation time. When minsize is used, both the size and timestamp of a log file are considered.
rotate 5
一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
compress
在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
delaycompress
总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok
在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty
如果日志文件为空,轮循不会进行。
postrotate/endscript
在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
compress
通过gzip压缩转储以后的日志
nocompress
不压缩
copytruncate
用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate
备份日志文件但是不截断
create mode owner group
转储文件,使用指定的文件模式创建新的日志文件
nocreate
不建立新的日志文件
delaycompress
和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress
覆盖 delaycompress 选项,转储同时压缩。
errors address
专储时的错误信息发送到指定的Email 地址
ifempty
即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty
如果是空文件的话,不转储
mail address
把转储的日志文件发送到指定的E-mail 地址
nomail
转储时不发送日志文件
olddir directory
转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir
转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript
在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily
指定转储周期为每天
weekly
指定转储周期为每周
monthly
指定转储周期为每月
rotate count
指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabooext [+] list
让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size
当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)
missingok
在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
3,glog源码定义了输出日志的文件名格式,需要修改/glog/src/ logging.cc 源文件
在其中的LogFileObject::Write函数里修改
如图,我把日志文件改成只以月日-时-进程号.log结尾的
日志文件名前缀由glog接口指定
修改完之后进入/glog/执行命令./autogen.sh && ./configure && make && sudo make install
若发生错误,可能是已安装了gflags,需要先把gflags卸载再安装。可参考此博客https://blog.csdn.net/Hesy_H/article/details/105647783
之后再运行glog的程序产生的日志文件就会以在/glog/src/ logging.cc里设置的文件尾结尾了
g++ main.cpp -L/usr/local/lib/ -lglog -o test
4,配置logrotate定时处理
- 需要明白logrotate怎么触发运行#
每日 每周 每月
或者自定义 crontab任务
2.明白触发运行后,满足日志切分的条件#
不写size就每次触发都会形成新的切分
如果需要定时间的话需要修改/etc/crontab文件,加上一条定时任务
sudo vim /etc/crontab
*/1 * * * * root /usr/sbin/logrotate /etc/logrotate.conf
这里设置的是一分钟执行一次
/etc/crontab文件和crontab -e命令区别
1、格式不同
前者
For details see man 4 crontabs
Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr …
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed
后者
#50 1 * * * command
2、使用范围
修改/etc/crontab这种方法只有root用户能用,这种方法更加方便与直接,直接给其他用户设置计划任务,而且还可以指定执行shell等等,
crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务。然后自动写入
/var/spool/cron/usename
crontab -e 与 /etc/crontab 修改语法格式不一样,后者多一个 user 指定
修改完之后为了保险起见建议重启cron服务(有的系统是crond)
service cron restart
logrotate的三个大小相关的参数size/minisize/maxsize
https://www.jianshu.com/p/93e888f4492e