0

我有一个使用 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 调用。

4

1 回答 1

0

原来这是 QtCreator 处理依赖项的方式的问题。当我更新它们时,它没有将库构建到正确的目录,所以可执行文件从来没有用 Glog 语句构建。

于 2016-05-12T16:45:41.663 回答