【问题标题】:Change logging directory in Google glog更改 Google glog 中的日志记录目录
【发布时间】:2013-10-17 23:04:13
【问题描述】:

如何更改 Google glog 中的输出目录?

我只找到google::SetLogDestination(google::LogSeverity, const char* path)

试过了:

google::SetLogDestination(ERROR, "C:\\log\\error.log);
google::InitGoogleLogging("Test");  

LOG(ERROR) << "TEST";

但是什么都没写!

顺便说一句:如果您建议另一个轻量级、易于使用且线程安全的库,请告诉我!

感谢您的帮助!

【问题讨论】:

  • 您确定转义在该路径字符串中正常工作吗?您尝试在命令行中设置日志目录的内容:GLOG_log_dir=C:\log\error.log ./your_application

标签: c++ logging glog


【解决方案1】:

您还可以执行以下操作之一:

只要您安装了 GFlgas 库,就将日志目录作为命令行参数传递:

./your_application --log_dir=/some/log/directory

如果你不想在命令行中传递它,而是在源代码中设置它:

FLAGS_log_dir = "/some/log/directory";

如果未安装 Google gflags 库,您可以将其设置为环境变量:

GLOG_log_dir=/some/log/directory ./your_application

【讨论】:

    【解决方案2】:

    这是我做的测试,你可以试试,

    #include <glog/logging.h>
    
    using namespace std;
    
    int main(int /*argc*/, char** argv)
    {
        FLAGS_logtostderr = true;
        google::SetLogDestination(google::GLOG_INFO,"c:/lovelyGoogle" );
        google::InitGoogleLogging(argv[0]);
    
        LOG(INFO) << "This is INFO";
        LOG(WARNING) << "This is WARNING";
        LOG(ERROR) << "This is Error";
    
        system("pause");
        return 0;
    }
    

    在 Visual Studio 2012 和 Windows 7 上的 google-glog 0.3.3 下测试。
    它在我的 C 驱动程序上生成了 lvoelyGoogle20131016-141423.5160
    如果设置FLAGS_logtostderr = false,则不会生成日志文件,

    相信你已经看过this(好吧,我不评论了)

    希望这有帮助,祝你好运。


    PS:我已经在 QtCreator (Qt5.1) 以及 Windows7 上进行了测试,没有任何输出。我现在不知道如何解决它。

    【讨论】:

    • 奇怪!谢谢你的帮助!
    • @CCC 请注意,例如,如果您希望将其放在“专用”目录中 - 该目录必须存在(glog 代码不会在程序运行时创建)。例如:如果您希望将日志保存到:c:/yourDir/lovelyGoogle(注意添加的yourDir),则yourDir 需要在您的程序执行之前存在。
    【解决方案3】:

    我用这个:

    fLS::FLAGS_log_dir = "c:/Documents/logs";
    

    【讨论】:

      【解决方案4】:

      在我使用这个库的可怕经历中,我发现这个标志FLAGS_log_dir 和这个函数google::SetLogDestination() 相互竞争。太棒了。

      我了解到您可以使用其中之一,但不能同时使用。

      选项 1:使用标志

      FLAGS_log_dir=/path/to/your/logdir
      google::InitGoogleLogging(exec_name.c_str());
      

      并生成一堆名为your_exec.some_number.machine_name.log.log_severity.... 的文件以及它们各自在/path/to/your/logdir 中的符号链接。将为您在程序中使用的每个 log_severity 生成一对文件(INFO、WARNING、ERROR、FATAL)。有趣的事实:INFO 文件包含所有内容,WARNING 文件包含从警告向下等所有内容。天知道为什么需要这些符号链接。

      选项 2:使用文件名

      std::string log_dir = "/path/to/log/dir";
      for (int severity = 0; severity < google::NUM_SEVERITIES; ++severity) {
         std::string fpath = fs::path(fs::path(log_dir) / fs::path(exec_name).filename());
         google::SetLogDestination(severity, fpath.c_str());
         google::SetLogSymlink(severity, "");
      }
      google::InitGoogleLogging(exec_name.c_str());
      

      其中fs是c++17的文件系统库。这是将所有日志发送到同一个文件(只有一个,不是很多),最后删除那个烦人的符号链接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-29
        相关资源
        最近更新 更多