使用 easylogging++ 记录 QString 时插入的额外空间

Posted

技术标签:

【中文标题】使用 easylogging++ 记录 QString 时插入的额外空间【英文标题】:Extra space inserted when logging QString with easylogging++ 【发布时间】:2017-11-29 13:44:51 【问题描述】:

我有多行代码触发记录器(INFO 模式):

LOG(INFO) << connectionsBOther.at(connectionIdx).line
          << " (" << QString::number(connectionsBOther.at(connectionIdx).direction) << ") | "
          << connectionsBOther.at(connectionIdx).directionTarget
          << " "
          << QString::number(connectionsBOther.at(connectionIdx).departureRelative);

输出示例如下:

2017-11-29 14:38:07,643 INFO  [default] M85 ( 2) |  Hello  1

我遇到的问题是似乎附加在各个 QString::number() 调用前面的额外空间(下面的空格标有 # 以使其更明显):

2017-11-29 14:38:07,643 INFO  [default] M85#(#2)#|##Hello##1

我正在寻找以下输出:

2017-11-29 14:38:07,643 INFO  [default] M85#(2)#|#Hello#1

我需要为此输出使用 INFO。我习惯于LOG(DEBUG) 在整个地方放置额外的空间,但没想到LOG(INFO) 会出现这种情况。

【问题讨论】:

请尝试 1-cout 查看@p-a-o-l-o 的回答以及我在他下方的评论。据我所知,该问题与 easylogging++ 的日志记录机制密切相关。 【参考方案1】:

据此:https://github.com/muflihun/easyloggingpp/issues/179,LoggingFlag::AutoSpacing 标志可用。

来自文档(https://github.com/muflihun/easyloggingpp#logging-flags):

您可以使用静态 el::Loggers::addFlag 和 el::Loggers::removeFlag。您可以检查某些标志是否 使用 el::Loggers::hasFlag 可用,所有这些函数都需要 强类型枚举 el::LoggingFlag

我认为您应该取消设置上述标志以避免自动间隔(即从日志中删除多余的空格)。

更新:

如果不使用&lt;&lt; 运算符对您来说不是问题,您可以随时使用连接:

LOG(INFO) << QString(connectionsBOther.at(connectionIdx).line
          + " (" + QString::number(connectionsBOther.at(connectionIdx).direction) + ") | "
          + connectionsBOther.at(connectionIdx).directionTarget
          + " "
          + QString::number(connectionsBOther.at(connectionIdx).departureRelative));

【讨论】:

我找到了另一个解决方案,但你的也可以。为了使答案完整,我添加了自己找到的答案。 :)

以上是关于使用 easylogging++ 记录 QString 时插入的额外空间的主要内容,如果未能解决你的问题,请参考以下文章

easylogging++学习记录:流式日志

GLSDK 打破了easylogging++

easylogging++:在应用程序启动时清除日志文件

cmake:下载easylogging++,直接使用源码

easylogging++ 如何避免多次初始化

easylog -- Linux 下的简单日志库