C++工程,glog

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
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
附件是VS2010的工程C++日志类,谷歌的东西,很好用,也很强大哦! glog简介 Google glog是一个基于程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例: LOG(INFO) << "Found " << num_cookies << " cookies"; “LOG”宏为日志输出关键字,“INFO”为严重性程度。 主要支持功能: 1, 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为; 2, 严重性分级,根据日志严重性分级记录日志; 3, 可有条件地记录日志信息; 4, 条件中止程序。丰富的条件判定宏,可预设程序终止条件; 5, 异常信号处理。程序异常情况,可自定义异常处理过程; 6, 支持debug功能。可只用于debug模式; 7, 自定义日志信息; 8, 线程安全日志记录方式; 9, 系统级日志记录; 10, google perror风格日志信息; 11, 精简日志字符串信息。 开源代码托管 开源代码地址:https://github.com/google/glog 其实官方开源代码已经有大量demo可以参考了,也提供了VS可以直接打开编译的项目。 如何使用 1:把glog文件夹拷贝到源代码目录 2:在工程设置中添加附加包含目录(glog\include;)和附加库目录(glog\lib;),在附件依赖项中添加对应lib文件,一一对应关系如下: MDd libglog32MDd.lib MD libglog32MD.lib MTd libglog32MTd.lib MT libglog32MT.lib 建议使用MDd和MD方式,带上对应的dll(在glog\bin目录,需要时拷贝到bin文件输出目录)可以避免使用MTd,MT引起的内存泄露是值得的。 #include #include using namespace std; //包含glog头文件,建议放在stdafx.h中 //#define GOOGLE_GLOG_DLL_DECL // 使用静态库的时候用这个,不过我测试静态库有内存泄露,所以不推荐使用静态库 #define GLOG_NO_ABBREVIATED_SEVERITIES #include "glog/logging.h" //获取当前程序的运行目录 string GetAppPathA() { char szExePath[MAX_PATH] = {0}; GetModuleFileNameA(NULL,szExePath,MAX_PATH); char *pstr = strrchr(szExePath,'\\'); memset(pstr+1,0,1); string strAppPath(szExePath); return strAppPath; } void main() { //glog初始化 google::InitGoogleLogging("重签程序"); string strLogPath = GetAppPathA().append("LogInfo\\"); CreateDirectoryA(strLogPath.c_str(),NULL); google::SetLogDestination(google::GLOG_INFO,strLogPath.c_str()); //功能测试 LOG(INFO)<<"log start...";//普通日志 LOG(WARNING)<<"Warning log";//警告日志 LOG(ERROR)<<"Error log";//错误日志 int i = 4; LOG_IF(INFO,i == 4)<<"Log if Test"; //以上就是我常用的几个日志函数了,当然还有很多更加强大的日志相关函数,大家如有有兴趣,可以参照官方给的示例使用, //开源代码地址:https://github.com/google/glog MessageBoxA(NULL,"Test Over",":)",MB_ICONINFORMATION); } 测试程序中,我使用的动态链接库方式。(Debug模式中代码生成为MDd,Release为MD)。lib是截止现在2015-11-04-21:35是最新的。采用VS2010编译,MTd,MT,MDd,MD方式编译在测试项目中都有提供。 博文地址: http://blog.csdn.net/sunflover454/article/details/49643625

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值