在Google glog中更改日志目录

11

我该如何在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 - NicholasM
5个回答

14
你还可以选择以下操作之一:
只要安装了GFlgas库,就可以将日志目录作为命令行参数传递:
```bash your_program --log_dir=/path/to/logdir ```
./your_application --log_dir=/some/log/directory

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

FLAGS_log_dir = "/some/log/directory";

如果未安装Google gflags库,您可以将其设置为环境变量:
GLOG_log_dir=/some/log/directory ./your_application

5

这是我进行的测试,你可以尝试一下:

#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;
}

在Windows7上,通过Visual studio 2012和google-glog 0.3.3进行测试。
在我的C盘生成了lvoelyGoogle20131016-141423.5160的日志文件。
如果你将FLAGS_logtostderr = false设置为false,则不会生成日志文件。
我相信你已经阅读了这个(好吧,我对此没有评论)。
希望这有帮助,祝你好运。
附言:我还在Windows7上使用QtCreator(Qt5.1)进行了测试,但没有任何输出。我现在也不知道该怎么解决。

奇怪!无论如何,还是谢谢你的帮助! - leon22
注意,如果您想将其放置在“专用”目录中,例如 c:/yourDir/lovelyGoogle(请注意 yourDir 的添加),那么必须存在此目录(glog 代码不会在程序运行时创建)。因此,在程序执行前需要先创建好 yourDir 目录。@CCC - Guy Avraham

3
在我与这个库的可怕经历中,我发现这个标志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中对应的符号链接。对于程序中使用的每个日志级别(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的文件系统库。它将所有日志发送到同一个文件中(只有一个,而不是多个),最后删除那个讨厌的符号链接。


1
我使用这个:

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

1

这个解决方案对我有效:

FLAGS_log_dir = "./log/";
FLAGS_alsologtostderr = true;
google::InitGoogleLogging(argv[0]);

FLAGS_log_dir 设置首选的日志输出目录。
FLAGS_alsologtostderr 设置是否将日志同时输出到 stderr,同时将日志保存到单独的文件中以供查看。

注意:

如果您希望将日志写入文件和 stderr,请不要将 FLAGS_logtostderr 设置为 true,而应该使用我所做的方式,即使用 FLAGS_alsologtostderr


在 Clion 2023.1.3、macOS 13.3.1 (a) (22E772610a) 和 glog v0.6.0 下进行了测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接