glog捕获qt应用程序崩溃日志

使用glog捕获qt应用程序的崩溃日志,需要在qt应用程序中添加glog库,并在代码中使用glog的相关函数进行日志记录。具体步骤如下:

1. 在qt应用程序中添加glog库,可以通过源码编译或者使用已经编译好的库文件。

2. 在代码中添加头文件#include <glog/logging.h>,并在main函数中初始化glog库,例如:

```
google::InitGoogleLogging(argv[0]);
```

3. 在需要记录日志的地方使用glog的相关函数进行日志记录,例如:

```
LOG(INFO) << "This is an info message.";
LOG(ERROR) << "This is an error message.";
```

部分代码片段如下:

#include "mylog.hpp"
#include <QDir>
#include <QCoreApplication>
#include <iostream>
#include <fstream>
#include <QDateTime>
using namespace  std;

// 扑捉到程序崩溃或者中断时,把相应的信息打印到log文件和输出到屏幕。
void SignalHandler(const char *data, size_t size) {

    QString logPath = QDir::homePath() + "/logstation/crash" ;

    //若crash文件夹不存在则创建
    QDir logPathDir(logPath);
    if(!logPathDir.exists()){
        QDir().mkpath(logPathDir.absolutePath());
    }
   //组织文件名称
    QString strTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    logPath = logPath + "/"+ strTime + ".log";
    std::string glog_file = logPath.toStdString();

    //创建文件
    std::ofstream fs(glog_file, std::ios::app);

    //打印到文件
    std::string str = std::string(data, size);
    fs << str;
    fs.close();

    //打印到控制台
    LOG(INFO) << str;
}


void MyLog::initMylog(const char * appName)
{

    QString logPath = QDir::homePath() + "/logstation" ;

    QDir logPathDir(logPath);
    if(!logPathDir.exists()){
        QDir().mkpath(logPathDir.absolutePath());
    }

    //==============日志设置及测试===============//
    google::InitGoogleLogging(appName);
    google::SetLogFilenameExtension(".log");

    //会输出导致程序结束的信号,和google::InstallFailureWriter(&FatalMessageDump); 配合使用,可以在程序出现严重错误时将详细的错误信息打印出来
    google::InstallFailureSignalHandler(); //注册一下即可。默认是打印到stderr中,可以通过InstallFailureWriter更改输出目标。
    google::InstallFailureWriter(&SignalHandler);

    //日志文件路径及文件名前缀
    QString strLogPre = logPath + "/log_info_";
    std::string str = strLogPre.toStdString();
    const char * base_filename = str.c_str();

    google::SetLogDestination(google::INFO,base_filename); // 把日志同时记录文件,最低级别为INFO,此时全部输出
    //google::SetLogDestination(google::WARNING, "log/log_warning_");
    //google::SetLogDestination(google::ERROR, "log/log_error_");
    //google::SetLogDestination(google::FATAL, "log/log_fatal_");

    // 通过GFLAGS来设置参数,更多选项可以在logging.cc里面查询
    // 日志等级分为INFO, WARNING, ERROR, FATAL,如果是FATAL级别这直接运行报错

    FLAGS_stderrthreshold = google::INFO;    //INFO, WARNING, ERROR都输出,若为google::WARNING,则只输出WARNING, ERROR
    google::SetStderrLogging(google::GLOG_INFO);

    FLAGS_colorlogtostderr = true;  //log为彩色
    FLAGS_logbufsecs = 0;  // Set log output speed(s)
    FLAGS_max_log_size = 10;  // Set max log file size
    FLAGS_stop_logging_if_full_disk = true;  // If disk is full

    //google::EnableLogCleaner(30);//日志可以保留30天
}


void MyLog::shutDownMylog()
{
    google::ShutdownGoogleLogging();
}

捕获崩溃日志的原理是在程序崩溃时,操作系统会向程序发送一个信号,glog库可以通过捕获这个信号来记录崩溃日志。具体来说,glog库会在程序启动时注册一个信号处理函数,当程序崩溃时,操作系统会向程序发送一个SIGSEGV信号(或其他信号),glog库会捕获这个信号,并在信号处理函数中记录崩溃日志。

但是,有些类型的崩溃是无法捕获的,例如:

1. 程序死锁:如果程序在某个地方死锁了,那么glog库就无法记录崩溃日志。

2. 内存泄漏:glog库只能记录程序崩溃时的状态,无法记录程序运行过程中的内存泄漏等问题。

除了使用glog库,还有其他一些更好的办法捕获崩溃日志,例如:

1. 使用操作系统提供的工具,例如Windows的Event Viewer、Linux的syslog等。

2. 使用第三方崩溃日志记录工具,例如Bugsnag、Sentry等。

这些工具可以更全面地记录程序的崩溃信息,并提供更丰富的分析和排查功能。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在CMakeLists.txt中,你可以使用以下命令来加载glog:find_package(Glog REQUIRED)include_directories(${GLOG_INCLUDE_DIRS})target_link_libraries(mytarget ${GLOG_LIBRARIES}) ### 回答2: 在Ubuntu的Qt项目中使用glog,可以通过CMakeList文件来加载glog库。下面是一个示例的CMakeList配置: 首先,在CMakeList.txt文件的开头,添加以下代码行: ``` find_package(glog REQUIRED) include_directories(${GLOG_INCLUDE_DIR}) ``` 这将会使用CMake的`find_package`命令来寻找安装在系统中的glog库,并将其标记为必需。然后,通过使用`include_directories`命令,将glog库的头文件目录添加到项目的包含目录中。 然后,在添加了项目的源文件后,可以使用以下代码行来链接glog库: ``` target_link_libraries(<your_project_name> ${GLOG_LIBRARY}) ``` 这会使用CMake的`target_link_libraries`命令将glog库链接到项目中。请确保将`<your_project_name>`替换为您的Qt项目名称。 最后,为了确保程序在运行时能够找到glog库,可以将glog库的动态链接库文件路径添加到系统的环境变量中。可以在终端中执行以下命令: ``` export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib ``` 这将会将glog库的动态链接库文件路径`/usr/local/lib`添加到系统的环境变量中。 完成以上步骤后,重新生成并构建您的Qt项目,glog库应该能够成功加载。 需要注意的是,您需要先在系统中正确安装glog库才能使用上述配置。可以通过终端执行以下命令进行安装: ``` sudo apt-get install libgoogle-glog-dev ``` 希望这能帮助到您! ### 回答3: 在Ubuntu上使用Qt进行开发时,可以通过CMake来加载Glog库。首先,确保Glog库已经安装在系统中。如果没有安装,可以通过以下命令安装: ``` sudo apt-get install libgoogle-glog-dev ``` 接下来,在CMakeLists.txt文件中添加以下代码来加载Glog库: ``` # 需要找到Glog库的路径 find_package(Glog REQUIRED) # 添加Glog库的头文件路径 include_directories(${GLOG_INCLUDE_DIRS}) # 添加Glog库的链接路径 link_directories(${GLOG_LIBRARY_DIRS}) # 将需要使用Glog的源文件添加到要编译的目标中 add_executable(my_target main.cpp) # 链接Glog库 target_link_libraries(my_target ${GLOG_LIBRARIES}) ``` 这样,使用Qt进行开发时,可以在源文件中引入Glog库的头文件,并使用其中的函数和类了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zw_ggr_2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值