簡體   English   中英

為什么使用 Logger 而不是 cout?

[英]Why use a Logger instead of cout?

在大多數開源 C++ 代碼中,我可以看到使用了像 Google 日志庫glog這樣的記錄器。 但是有什么好處呢? 我能找到的唯一優點:

  1. 日志記錄是線程安全的,因此首選多線程
  2. 您可以選擇嚴重程度

因此,如果我不進行多線程處理並且不需要嚴重性級別,那么使用std::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;
}

記錄器為您提供更多控制——您可以調整嚴重性閾值,您可以決定日志記錄的位置(例如,文件、標准輸出、其他地方)等,而無需重新編譯程序

如果這不是您的問題,並且您絕對確定您將始終希望向 stdout 輸出相同的輸出並且永遠不想調整它(至少在沒有重新編譯的情況下),請務必繼續使用cout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM