【问题标题】:Change Glog logging directory of linked library更改链接库的 Glog 日志记录目录
【发布时间】:2016-05-11 18:02:20
【问题描述】:

我有一个使用 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 中以与工作链接库相同的方式链接,除了 its Glog 调用根本没有写入这个日志文件。我希望它们看起来相似,但具有标题[IO511 &lt;time&gt; Localizer.cpp:&lt;lineNo&gt;],而不是与“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) &lt;&lt; "New Localizer created."; 在正在创建的日志文件中的任何地方都找不到。所以我的问题是,如何让 this 库将其 Glog 语句输出到与应用程序其余部分相同的文件中?我还梳理了每个链接库的源代码,发现 Glog 的包含和使用方式没有差异。两者都调用了#include &lt;glog/logging.h&gt;,然后立即使用Glog LOG(&lt;severity&gt;) 调用。

【问题讨论】:

  • 到目前为止您尝试了什么。请发布您的代码,我们很乐意为您提供帮助!
  • 此外,所有 Glog 都说默认情况下,所有日志文件都写入临时目录,但是通过我的 Glog 源查看我找不到的目录。并且添加标志 --logtostderr=1 并不会改变我的链接库不会写入与我的应用程序其余部分相同的位置这一事实。

标签: shared-libraries glog


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多