Abseil LOG 输出在 Qt Creator 中打印两次

问题描述 投票:0回答:1

我创建了一个使用 Abseil 的简单项目,并在 Qt Creator 中构建和运行。

当我使用任何下降记录时,我会在 Qt Creator 的“应用程序输出”窗格中看到两次输出。一次为红色,一次为白色(我使用的是深色主题)。使用

std::cout
,我看到输出一次为白色,正如预期的那样。使用
std::cerr
,我看到输出一次为红色,正如预期的那样。我不知道如何阻止 Abseil 记录打印两次。如果我从命令行运行相同的进程,则 Abseil 日志只会按预期打印到 stderr。

  • 操作系统:Windows 10
  • 已测试的 Qt Creator 版本:11 和 12
  • Qt版本:6.2.4 MSVC2019 64位

Abseil 最近在本地克隆为子目录。提交是

2a636651729cec997a433ce8e363c6344130944e
,尽管旧版本也会发生这种情况。

目录结构如下:

.
|-- CMakeLists.txt
|-- CMakeLists.txt.user
|-- abseil-cpp
`-- main.cpp

这是我的主要内容:

#include <absl/log/globals.h>
#include <absl/log/initialize.h>
#include <absl/log/log.h>

#include <iostream>

int main() {
  absl::InitializeLog();
  absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo);
  std::cout << "Cout test" << std::endl;
  std::cerr << "Cerr test" << std::endl;
  LOG(INFO) << "test";
  return 0;
}

该程序将打印类似以下内容:

Cout test
Cerr test
I0104 17:58:48.312991   20796 main.cpp:12] test
I0104 17:58:48.312991   20796 main.cpp:12] test

(“Cerr test”和“main.cpp:12] test”行之一为红色)

这是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.26.4)

project(main LANGUAGES CXX)

add_executable(${PROJECT_NAME}
  main.cpp
)

set(ABSL_PROPAGATE_CXX_STD ON)
add_subdirectory(abseil-cpp)

target_link_libraries(${PROJECT_NAME}
PUBLIC
  absl::log
  absl::log_initialize
)
c++ qt-creator abseil
1个回答
0
投票

这已被确定为 Qt Creator 中的一个错误。我想出了一个解决方法。我创建了自己的“Log Sink”并用绳索注册了它。

class MyLogSink : public absl::LogSink {
public:
  void Send(const absl::LogEntry& entry) override {
    std::cerr << entry.text_message_with_prefix_and_newline();
  }
};
absl::LogSink *mySink = new MyLogSink;
absl::AddLogSink(mySink);

此外,

LogSeverity
级别应设置为最大值以禁用通常的ABSL日志记录。

absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfinity);
© www.soinside.com 2019 - 2024. All rights reserved.