簡體   English   中英

如何在C ++中使用自動換行符實現日志記錄宏

[英]How to implement a logging macro with automatic newline in C++

在C ++庫glog (Google日志記錄模塊)中,有一個不錯的界面,您可以在其中編寫

LOG(INFO) << "abc " << my_var;

在運行時,它會在運行時打印類似abc 5\\n的內容(如果my_var為5),並在其中自動以換行符終止。

這比必須始終以std::endl終止要優越得多

std::cout << "abc " << my_var << std::endl;

我需要在代碼中復制這種效果的最簡單方法(代碼+宏)是什么?

我認為這個想法是要返回一個臨時包裝對象:

#include <iostream>

struct Log
{
    ~Log(void) { ::std::cout << ::std::endl; }
};

template<typename T> Log &&
operator <<(Log && wrap, T const & whatever)
{
    ::std::cout << whatever;
    return ::std::move(wrap);
}

int main()
{
    Log() << "whatever";
    Log() << "more";
    return 0;
}

在線編譯器

請注意,此宏可在記錄開始時用於執行條件分支。 如果嚴重性級別較低,則跳過日志記錄。

#define LOG(level) \
    if(g_log_lelevel <= level) Log()

暫無
暫無

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

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