c++ 在Google glog中更改日志目录

evrscar2  于 2023-05-30  发布在  Go
关注(0)|答案(5)|浏览(150)

如何在Google glog中更改输出目录?
我只找到google::SetLogDestination(google::LogSeverity, const char* path)
试着用:

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

LOG(ERROR) << "TEST";

但什么都没写!
顺便说一句:如果你建议另一个轻量级的,易于使用和线程安全的库,请让我知道!
Thx任何帮助!

x7rlezfr

x7rlezfr1#

您还可以执行以下操作之一:
只要安装了GFlgas库,就将日志目录作为命令行参数传递:

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

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

FLAGS_log_dir = "/some/log/directory";

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

GLOG_log_dir=/some/log/directory ./your_application
qacovj5a

qacovj5a2#

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

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

在Windows 7上的Visual Studio 2012、google-glog 0.3.3下测试。
它在我的C驱动程序上生成了lvoelyGoogle20131016-141423.5160
如果设置了FLAGS_logtostderr = false,则不会生成日志文件,
我相信你已经读过this了(好吧,我对此无可奉告)
希望这对你有帮助,祝你好运。
PS:我已经在QtCreator(Qt5.1)和Windows7上测试过了,没有任何输出。我现在不知道该怎么补救。

enyaitl3

enyaitl33#

在我使用这个库的可怕经历中,我发现这个标志FLAGS_log_dir和这个函数google::SetLogDestination()相互竞争。好极了
我知道你可以使用其中一个,但不能两者都用。

选项1:使用标志

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

并在/path/to/your/logdir中生成一堆名为your_exec.some_number.machine_name.log.log_severity....的文件及其各自的符号链接。将为程序中使用的每个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的文件系统库。这是将所有日志发送到同一个文件(只有一个,不是很多),最后删除那个讨厌的符号链接。

mwecs4sa

mwecs4sa4#

我用这个:

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

5rgfhyps5#

这个解决方案对我很有效:

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下测试

相关问题