glog配置与持久化记录

最近采用了glog作为一个项目的日志库,作为轻量级日志库,其功能完备,下面列举了一些大家常用的日志配置。

场景一:将日志输出到指定文件夹和终端中:

#include <iostream>
#include "glog/logging.h"

using namespace std;

int main(int argc, char** argv)
{
	google::InitGoogleLogging(argv[0]);     // 初始化日志库
	FLAGS_log_dir="./log/";                 // 设置日志存放路径
	FLAGS_alsologtostderr = 1;              // 日志同时输出到stderr
	LOG(INFO) << "This is INFO data";       // 打印INFO等级日志
	LOG(WARNING) << "This is WARNING data"; // 打印WARNING等级日志
	LOG(ERROR) << "This is ERROR data";     // 打印ERROR等级日志
	LOG(FATAL) << "This is FATAL data";     // 打印FATAL等级日志
	return 0;
}

结果存储在<program name>.<host name>.<user name>.log.<Severity level>.<date>-<time>.<pid>格式的文件中

场景二:将指定级别的日志写入到文件中

#include <iostream>
#include "glog/logging.h"

using namespace std;

int main(int argc, char** argv)
{
	google::InitGoogleLogging(argv[0]);     // 初始化日志库
	FLAGS_minloglevel = google::ERROR;      // 只记录大于等于ERROR等级的日志
	FLAGS_log_dir="./log/";                 // 设置日志存放路径
	FLAGS_alsologtostderr = 1;              // 日志同时输出到stderr
	LOG(INFO) << "This is INFO data";       // 打印INFO等级日志
	LOG(WARNING) << "This is WARNING data"; // 打印WARNING等级日志
	LOG(ERROR) << "This is ERROR data";     // 打印ERROR等级日志
	LOG(FATAL) << "This is FATAL data";     // 打印FATAL等级日志
	return 0;
}

gllog日志等级划分为GLOG_INFO = 0, GLOG_WARNING = 1, GLOG_ERROR = 2, GLOG_FATAL = 3,当最小日志级别设置为ERROR时,INFO和WARNING日志内容将不记录。

场景三:根据条件写入指定日志

#include <iostream>
#include "glog/logging.h"

using namespace std;

int main(int argc, char** argv)
{
	google::InitGoogleLogging(argv[0]);     // 初始化日志库
	FLAGS_minloglevel = google::ERROR;      // 只记录大于ERROR等级的日志
	FLAGS_log_dir="./log/";                 // 设置日志存放路径
	FLAGS_alsologtostderr = 1;              // 日志同时输出到stderr
	for(int i = 0; i < 10; i++)
	{
		 LOG_IF(ERROR, i < 3) << i;
	}
	return 0;
}

场景四:将程序段错误信息记录到日志

#include <iostream>
#include "glog/logging.h"

using namespace std;

void (writer)(const char* data, int size)
{
	LOG(ERROR) << data;
}

void dump()
{
	char buf[3];
	memcpy(buf, "12345678", 102400);
}


int main(int argc, char** argv)
{
	google::InitGoogleLogging(argv[0]);     // 初始化日志库
	FLAGS_minloglevel = google::ERROR;      // 只记录大于ERROR等级的日志
	FLAGS_log_dir="./log/";                 // 设置日志存放路径
	FLAGS_alsologtostderr = 1;              // 日志同时输出到stderr
    google::InstallFailureSignalHandler();  // 捕捉信号
    google::InstallFailureWriter(&writer);  // 打印错误信息
	dump();
	return 0;
}

场景五:持久化记录日志,设置日志大小,删除旧日志

#include <iostream>
#include "glog/logging.h"

using namespace std;

void write()
{
	for(int i = 0; i < 2048; i++)
	{
		char data[1025] = {0};
		memset(data, '1', sizeof(data)-1);
		LOG(INFO) << i << data;
	}
}


int main(int argc, char** argv)
{
	google::InitGoogleLogging(argv[0]);     // 初始化日志库
	FLAGS_log_dir="./log/";                 // 设置日志存放路径
	FLAGS_alsologtostderr = 1;              // 日志同时输出到stderr
	FLAGS_max_log_size = 1;                 // 单个日志文件大小上限(MB), 如果设置为0将默认为1
	FLAGS_stop_logging_if_full_disk = true; // 当磁盘写满时,停止输出
	write();
	return 0;
}

当明确了日志存储地址以及单个文件大小以后,可以随程序启动一个shell脚本,当日志目录文件个数超过指定上限时,删除旧日志。

一般来说可以不建议删除ERROR级别以上的文件。

#bin/bash
#本脚本用于删除glog目录下旧的INFO级别日志

#glog日志路径
log_path="/mnt/hgfs/test/log"
 
#监听频率 3秒扫描一次
monitor_time=3  
 
#是否开启监听
working_flag=true

#当日志文件超过该值则删除旧文件
file_number_threshould=10
 

cd $log_path
while $working_flag
        do
            #判断日志文件个数是否超过阀值
            file_number=$(ls -l | grep "a.wang-virtual-machine.wang.log.INFO*" | wc -l )
            if [ $file_number -gt $file_number_threshould ]
            then
                #把文件按从旧到新的顺序排列,删除旧日志,保留最新的10个日志文件
                declare -i delete_number=$(expr $file_number - $file_number_threshould )
                rm -r $(ls -rt | head -n$delete_number)
            fi
            sleep $monitor_time #休眠
        done

监控脚本启动前:

监控脚本启动后

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值