GLOG如何清理日志
1 日志清理
其实GLOG很长时间以来都没有日志清理功能。小白对此也很震惊,还特意去查了GLOG的提交记录。代码的提交记录显示,GLOG与日志清理有关的最初代码是2019年11月1日,而这个开源项目的起始时间可以追溯到2008年。也就是说,在长达11年的时间里,这个项目都没有清理日志的功能,甚至开发团队都没有进行相关代码的开发。
所以小白也在网上查询到一些文章,专门提到针对GLOG日志库使用时,由各路好手自己开发的日志清理工具。
如果小白开始使用这个库的时候还在它缺乏如此重要功能的时间段,那大概是会放弃它的吧。不过小白在体验过当前版本(即0.6.0)中的日志清理后,仍然还是有想要吐槽的冲动。
2 GLOG对日志清理功能的描述
在GLOG的ReadMe里,对日志清理功能的描述如下:
Automatically Remove Old Logs
To enable the log cleaner:
google::EnableLogCleaner(3); // keep your logs for 3 days
And then glog will check if there are overdue logs whenever a flush is performed. In this example, any log file from your project whose last modified time is greater than 3 days will be unlink()ed.
This feature can be disabled at any time (if it has been enabled)
google::DisableLogCleaner();
这里看上去非常简单,就是启用一下google::EnableLogCleaner()
函数,然后GLOG会在第一次刷新日志的时候把超期的日志清理掉,如果想禁用清理功能,就随时调用一下google::DisableLogCleaner()
函数。
唔……轻松愉快?!
事实并非如此。经过小白的测试,有以下几点问题值得吐槽,至少为什么明明有坑却不讲清楚:
google::FlushLogFiles()
前先写入内容才能清理掉日志;google::FlushLogFiles()
只能清理掉对应级别内的日志(而并不是如文档及代码注释所说可以清理掉该级别及以上的日志),比如google::FlushLogFiles(google::GLOG_INFO)
就只能清理GLOG_INFO
级别的日志。
其中第一点其实很不好:因为清理本身是一个动作,而写入是另一个动作,目前GLOG的做法是把清理这个动作绑定在写入之后进行,差评。
对于第二点,影响倒小一些:通常情况下Warning Error Fatal级别的日志比较少也比较小。但是清理功能的设计需求明明是按时间来筛选,怎么还需要按级别分别设置?
大家可能没意识到,把第一和第二点连起来看,意味着如果要删掉超期的Warning Error Fatal级别的日志,就需要到下一次写入同等级日志并刷新的时候!对于有强迫症的人来说这很难受,不太明白为什么是这样的设计思路,希望开发团队后期能做出点调整。
3 小白的示例
为了说明小白发现的两个问题,还是以上篇文章中控制小数点精度的代码为例:
#define GLOG_NO_ABBREVIATED_SEVERITIES
#include "glog/logging.h"
#include <iostream>
#include <iomanip>
#define WRITE_LOG(s) (LOG(INFO)<<s)int main(int argc, char* argv[])
{FLAGS_log_dir = "../Log/";if (!google::IsGoogleLoggingInitialized()){google::InitGoogleLogging("Alg_Log");}google::EnableLogCleaner(1);double pi = 3.141592653;// Method1: C语言风格的小数点控制char testInfo[128];sprintf_s(testInfo, "pi = %.3lf", pi);WRITE_LOG(testInfo); // 尝试注释掉写入动作1google::FlushLogFiles(google::GLOG_INFO);// Method2: C++语言风格的输出流小数点控制LOG(INFO) << std::fixed << std::setprecision(9) << "pi = " << pi; // 尝试注释掉写入动作2google::FlushLogFiles(google::GLOG_INFO);if (google::IsGoogleLoggingInitialized()){google::ShutdownGoogleLogging();}return 0;
}
如果你和我一样,把写入的两句代码注释掉,你就会发现日志不会被清理掉。
如果你完整执行以上代码,你就会发现:
看到了吧,在没有刷新WARNING ERROR FATAL之前,就是不会清理掉这些等级的日志。
诚以为在这个方面GLOG还需要改进。不过从开发团队给GLOG赋予的版本号来看也确实远不是完全体。希望开发团队能及时发现这些不太合理的地方。
GLOG如何清理日志相关推荐
- zookeeper3.4.6配置实现自动清理日志
在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...
- Linux登录安全及用户操作审计 ,linux下清理日志脚本
一.合理使用Shell历史命令记录功能 Linux下可通过history命令查看用户所有历史操作记录,同时shell命令操作记录默认保存在用户目录下的.bash_history文件中,有时候***会删 ...
- kubernetes 清理日志命令_Kubernetes之容器数据写满磁盘解决方法
磁盘写满引发的后果 容器数据磁盘写满造成的后果: Pod 不能删除 (一直 Terminating) Pod 不能被创建 (一直 ContainerCreating) 磁盘写满分两种情况: 磁盘空间全 ...
- Exchange 2007 SP1 如何定时清理日志???
Exchange 2007 SP1 如何定时清理日志??? 时间:2011-12-31 11:00Tag标签:来源:未知 作者:达思科技 点击: 93次 此文章出自: 专业数据恢复 问:Exchang ...
- Sql数据库批量清理日志
说明:SQL数据库日志经常过大,引起很多问题,网上很多清理日志的方法,但都比较麻烦,并且不能一次性清理所有数据库.如果有几十个数据库要清理,一个个手工来,想必非常麻烦. 以下代码清除 除了指定的'ma ...
- c mysql清理日志文件_MySQL 一般查询日志或者慢查询日志历史数据的清理
general log&slow query log 对于MySQL的一般查询日志和慢查询日志,开启比较简单,其中公用的一个参数是log_output,log_output控制着慢查询和一般查 ...
- Linux下清理日志及自动清理
liunx下清理日志 一.find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 此处我以tomcat下 logs目录下日志为例做演 ...
- Linux定时清理日志
Linux定时清理日志 shell脚本编写 设置定时器,定期执行脚本 shell脚本编写 1.先创建出一个一个文件夹用于保存.sh文件 mkdir crontab-file 2.创建.sh文件 vim ...
- zookeeper3.4.6配置实现自动清理日志【转】
在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...
最新文章
- 把JS 脚本嵌入CS运行
- Spartan-6的时钟资源、全局时钟缓冲器/多路复用器
- vim8支持的linux版本,Vim 8.0 版本安装方法及添加Python支持
- 32位crc校验码程序_CRC码计算及校验原理的最通俗诠释
- 进程间通信(一)管道
- 独角兽也未能幸免,2019“阵亡”新经济公司大盘点
- mui框架之a标签无法跳转的问题
- html怎么整体放大,html页面放大时不能铺满整个页面问题
- python怎样分析文献综述怎么写_怎么写文献综述?
- [数据结构]用插入排序和选择排序的思想实现优先级队列
- leetcode题解48-旋转图像
- MVC的Controller-Action布局:单独的创建/编辑页面还是创建/编辑/查看一体的页面?...
- 张北草原和锡林郭勒草原区别_草原:比您不知道的恶魔还强
- android获取悬浮窗权限,Android 悬浮窗权限校验
- C51编程25-应用篇(单片机与电脑端实现wifi通讯)
- 计算机ppt里怎么应用背景图,如何在电脑ppt软件中添加背景图片
- sqlserver中查询(升序、降序、top、百分比)
- serverlet增删改查项目代码
- 腾讯新品吐个槽,目标是你的核心用户
- 月圆茶润.人婵娟 小茶控·2021中秋茶礼 如“月”而至