我有一个使用 Glog 的应用程序。我可以使用环境变量或 Gflags 来更改此应用程序的日志记录目录。在这个应用程序中,我链接到另一个也使用 Glog 的库。我更改应用程序日志目录的方式也不会更改此链接库的日志目录。有谁知道如何更改链接库的 Glog 日志目录?
编辑:
在我的应用程序的主要可执行文件中,我从以下内容开始:
int main( int argc, char* argv[] ) {
google::ParseCommandLineFlags(&argc, &argv, true);
google::InitGoogleLogging(argv[0]);
...}
环境变量 GLOG_log_dir 设置为我的应用程序目录中的文件夹。立即,我可以从我的主要可执行文件中开始使用类似这一行的东西:
if(!FLAGS_localizer) {
LOG(INFO) << "Localizer not initialized. To initialize, use parameter -localizer";
}
当我转到我指定的日志文件夹时,我看到一个类似的文件gui.engr2-13-197-dhcp.int.colorado.edu.username.log.INFO.20160511-124903.19677
,其中包含LOG(INFO)
我的应用程序中的所有调用。现在我有一个包含 Glog 调用的链接库(一个通信子层),并且这些调用都正确地写入了..log.INFO...
我可以在上面看到的同一个文件。由于日志记录来自不同的文件,因此日志文件如下所示:
I0511 12:49:03.570866 1955471360 gui.cpp:31] Localizer not initialized. To initialize, use parameter -localizer
从我的主要可执行文件中,如下所示:
I0511 12:49:08.030144 1955471360 Node.cpp:1050] Found 1 URLs for nodes
I0511 12:49:08.030184 1955471360 Node.cpp:1057] node at 10.201.13.197:5555
I0511 12:49:08.030200 1955471360 Node.cpp:1085] Connecting to 10.201.13.197:5555
I0511 12:49:08.030308 1955471360 Node.cpp:1095] 'MochaGui' connected to remote node: 10.201.13.197:5555
来自我的有效链接库。我有另一个链接库(导致问题的那个),它在 cmake 中以与工作链接库相同的方式链接,除了它的Glog 调用根本没有写入这个日志文件。我希望它们看起来相似但具有 header [IO511 <time> Localizer.cpp:<lineNo>]
,而不是与“Node.cpp”相同(Node 是工作链接库)。例如,我使用我的(非工作)链接库来初始化 Localizer,如下所示:
Localizer::Localizer()
{
//FLAGS_log_dir = "/Users/username/Documents/ARPGDependencies/MochaGui/logs";
//google::InitGoogleLogging("Localizer");
m_bIsStarted = false;
m_pNode = new node::node;
m_pNode->init("commander_node");
if( m_pNode->advertise("command") == false ){
LOG(ERROR) << "Error setting up publisher.";
}
LOG(INFO) << "New Localizer created.";
}
我试图手动设置这个特定对象的日志目录,但是这些行被注释掉了,因为它没有任何效果。我知道这个构造函数正在被调用,因为我在我的应用程序头文件中这样调用它:
Localizer m_Localizer;
但是在LOG(INFO) << "New Localizer created.";
正在创建的日志文件中的任何地方都找不到。所以我的问题是,如何让这个库将其 Glog 语句输出到与应用程序的其余部分相同的文件中?我还梳理了每个链接库的源代码,发现 Glog 的包含和使用方式没有差异。在这两种情况下,#include <glog/logging.h>
都会调用,然后LOG(<severity>)
立即使用 Glog 调用。