为什么使用 Logger 而不是 cout?

Why use a Logger instead of cout?

在大多数开源 C++ 代码中,我可以看到使用了像 Google 日志库 glog 这样的记录器。但是有什么好处呢?我能找到的唯一优点:

  1. 日志记录是线程安全的,因此首选多线程
  2. 您可以选择严重程度

因此,如果我不进行多线程处理并且不需要严重级别,std::cout 可以安全使用还是我仍应使用记录器?为什么?

记录器为您提供更多控制 - 您可以调整严重性阈值,可以决定日志记录的位置(例如,文件、标准输出、其他地方)等 无需重新编译程序.

如果这不是您关心的问题,并且您绝对确定您总是希望将相同的输出输出到 stdout 并且永远不想调整它(至少在不重新编译的情况下不会),无论如何,去吧提前使用 cout.

使用记录器通常比直接写入标准输出更通用。记录器通常可以配置为写入标准输出或文件或其他地方。

一般来说,除了玩具程序外,不推荐直接使用std::cout。假设你有一个函数

 void foo() {
      auto x = calculate_some_result();
      std::cout << x;
 }

那么这个函数的用处非常有限:它只能写入std::cout,不能写入其他任何地方。然而,原则上,只要稍作改动,它就可以将结果写入任何地方:

void foo(std::ostream& out) {
      auto x = calculate_some_result();
      out << x;
}

现在相同的函数可以写入文件、stdout 或任何其他 ostream。由于此类输出通常在整个应用程序中使用,并且具有应用程序范围的配置是有益的,因此可以改用记录器(通常是全局对象):

 void foo() {
      auto x = calculate_some_result();
      LOGGER << x;
}