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如何清理日志相关推荐

  1. zookeeper3.4.6配置实现自动清理日志

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

  2. Linux登录安全及用户操作审计 ,linux下清理日志脚本

    一.合理使用Shell历史命令记录功能 Linux下可通过history命令查看用户所有历史操作记录,同时shell命令操作记录默认保存在用户目录下的.bash_history文件中,有时候***会删 ...

  3. kubernetes 清理日志命令_Kubernetes之容器数据写满磁盘解决方法

    磁盘写满引发的后果 容器数据磁盘写满造成的后果: Pod 不能删除 (一直 Terminating) Pod 不能被创建 (一直 ContainerCreating) 磁盘写满分两种情况: 磁盘空间全 ...

  4. Exchange 2007 SP1 如何定时清理日志???

    Exchange 2007 SP1 如何定时清理日志??? 时间:2011-12-31 11:00Tag标签:来源:未知 作者:达思科技 点击: 93次 此文章出自: 专业数据恢复 问:Exchang ...

  5. Sql数据库批量清理日志

    说明:SQL数据库日志经常过大,引起很多问题,网上很多清理日志的方法,但都比较麻烦,并且不能一次性清理所有数据库.如果有几十个数据库要清理,一个个手工来,想必非常麻烦. 以下代码清除 除了指定的'ma ...

  6. c mysql清理日志文件_MySQL 一般查询日志或者慢查询日志历史数据的清理

    general log&slow query log 对于MySQL的一般查询日志和慢查询日志,开启比较简单,其中公用的一个参数是log_output,log_output控制着慢查询和一般查 ...

  7. Linux下清理日志及自动清理

    liunx下清理日志 一.find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 此处我以tomcat下 logs目录下日志为例做演 ...

  8. Linux定时清理日志

    Linux定时清理日志 shell脚本编写 设置定时器,定期执行脚本 shell脚本编写 1.先创建出一个一个文件夹用于保存.sh文件 mkdir crontab-file 2.创建.sh文件 vim ...

  9. zookeeper3.4.6配置实现自动清理日志【转】

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

最新文章

  1. 把JS 脚本嵌入CS运行
  2. Spartan-6的时钟资源、全局时钟缓冲器/多路复用器
  3. vim8支持的linux版本,Vim 8.0 版本安装方法及添加Python支持
  4. 32位crc校验码程序_CRC码计算及校验原理的最通俗诠释
  5. 进程间通信(一)管道
  6. 独角兽也未能幸免,2019“阵亡”新经济公司大盘点
  7. mui框架之a标签无法跳转的问题
  8. html怎么整体放大,html页面放大时不能铺满整个页面问题
  9. python怎样分析文献综述怎么写_怎么写文献综述?
  10. [数据结构]用插入排序和选择排序的思想实现优先级队列
  11. leetcode题解48-旋转图像
  12. MVC的Controller-Action布局:单独的创建/编辑页面还是创建/编辑/查看一体的页面?...
  13. 张北草原和锡林郭勒草原区别_草原:比您不知道的恶魔还强
  14. android获取悬浮窗权限,Android 悬浮窗权限校验
  15. C51编程25-应用篇(单片机与电脑端实现wifi通讯)
  16. 计算机ppt里怎么应用背景图,如何在电脑ppt软件中添加背景图片
  17. sqlserver中查询(升序、降序、top、百分比)
  18. serverlet增删改查项目代码
  19. 腾讯新品吐个槽,目标是你的核心用户
  20. 月圆茶润.人婵娟 小茶控·2021中秋茶礼 如“月”而至

热门文章

  1. 福州python招聘_【Python程序员招聘|Python程序员最新招聘信息】-看准网
  2. ChatGPT 学习与使用总结
  3. 原创】OllyDBG 入门系列(一)-认识OllyDBG
  4. 让自己最开心最幸福的事
  5. STM32操作24位AD芯片ADS1246
  6. 操作系统实验:Linux内核模块编程
  7. 关于计算机的一些常识
  8. EDA 电子设计自动化VHDL系列课程15 – 智力抢答电路的设计与实现
  9. symbian os:描述符
  10. 永磁同步电机(PMSM)最小损耗控制Simulink仿真