文章目录
https://www.cnblogs.com/tianyajuanke/archive/2013/02/22/2921850.html
1,使用
1.1,使用步骤
1.1.1,包含头文件
#include "gloghelper.h"
1.1.2,使对glog的初始化生效
GLogHelper gloghelper(argv[0]);
1.1.3,使用glog
LOG(ERROR) << "schoolbus pipeline start!";
LOG(INFO) << buf;
1.2,.cpp文件
#include <stdlib.h>
#include "gloghelper.h"
//配置输出日志的文件夹:
#define LOGDIR "log"
#define MKDIR "mkdir -p "LOGDIR
//将信息输出到单独的文件和 LOG(ERROR)
void SignalHandle(const char* data, int size)
{
std::string str = std::string(data,size);
/*
std::ofstream fs("glog_dump.log",std::ios::app);
fs<<str;
fs.close();
*/
LOG(ERROR)<<str;
/*
也能够直接在这里发送邮件或短信通知。只是这种方法是被回调多次的
(每次回调仅仅输出一行错误信息,所以如上面的记录到文件,也须要以
追加模式方可)。所以这里发邮件或短信不是非常适合。只是倒是能够调用
一个 SHELL 或 PYTHON 脚本,而此脚本会先 sleep 3秒左右,然后将错误信息
通过邮件或短信发送出去,这样就不须要监控脚本定时高频率运行,浪费效率了。
*/
}
//GLOG配置:
GLogHelper::GLogHelper(char* program)
{
system(MKDIR);
google::InitGoogleLogging(program);
//设置级别高于 google::INFO的日志同一时候输出到屏幕
google::SetStderrLogging(google::INFO);
FLAGS_colorlogtostderr=true; //设置输出到屏幕的日志显示对应颜色
//设置 google::ERROR 级别的日志存储路径和文件名称前缀
//google::SetLogDestination(google::ERROR,"log/error_");
//设置 google::INFO 级别的日志存储路径和文件名称前缀
google::SetLogDestination(google::INFO,LOGDIR"/INFO_");
//设置 google::WARNING 级别的日志存储路径和文件名称前缀
google::SetLogDestination(google::WARNING,LOGDIR"/WARNING_");
//设置 google::ERROR 级别的日志存储路径和文件名称前缀
google::SetLogDestination(google::ERROR,LOGDIR"/ERROR_");
FLAGS_logbufsecs =0; //缓冲日志输出,默觉得30秒。此处改为马上输出
FLAGS_max_log_size =100; //最大日志大小为 100MB
FLAGS_stop_logging_if_full_disk = true; //当磁盘被写满时,停止日志输出
//设置文件名称扩展。如平台?或其他须要区分的信息
google::SetLogFilenameExtension("91_");
google::InstallFailureSignalHandler(); //捕捉 core dumped
//默认捕捉 SIGSEGV 信号信息输出会输出到 stderr,能够通过以下的方法自己定义输出>方式:
google::InstallFailureWriter(&SignalHandle);
}
//GLOG内存清理:
GLogHelper::~GLogHelper()
{
google::ShutdownGoogleLogging();
}
1.3,.h文件
#ifndef __GLOGHELPER__
#define __GLOGHELPER__
#include <glog/logging.h>
#include <glog/raw_logging.h>
//将信息输出到单独的文件和 LOG(ERROR)
void SignalHandle(const char* data, int size);
class GLogHelper
{
public:
//GLOG配置:
GLogHelper(char* program);
//GLOG内存清理:
~GLogHelper();
};
2,自定义修改
http://www.cppfans.org/1566.html
2.1,增加日志按天输出
2.1.1,进入glog安装目录glog-0.3.3
cd glog-0.3.3
glog默认是根据进程ID是否改变和文件大小是否超过预定值来确定是否需要新建日志文件的,
此处可以参考glog源码 logging.cc 文件中的 void LogFileObject::Write 函数中
if (static_cast<int>(file_length_ >> 20) >= MaxLogSize() ||
PidHasChanged()) {
我们只需要在此处加一个日期判断就可以了,PidHasChanged() 定义于 utilities.cc 文件中,
可以加一个类似的 DayHasChanged() 函数(注意 utilities.h 文件中加上函数声明):
static int32 g_main_day = 0;
bool DayHasChanged()
{
time_t raw_time;
struct tm* tm_info;
time(&raw_time);
tm_info = localtime(&raw_time);
if (tm_info->tm_mday != g_main_day)
{
g_main_day = tm_info->tm_mday;
return true;
}
return false;
}
再修改 void LogFileObject::Write 函数中的判断条件即可:
if (static_cast<int>(file_length_ >> 20) >= MaxLogSize() ||
PidHasChanged() || DayHasChanged()) {
2.1.2,编译
./configure
make