2016-12-15 27 views
1

我用了一個C++項目,谷歌的記錄(考勤記錄),其中源代碼包含信息項和進步的打印輸出:如何發送給Google Logger和cout?

std::cout << some_useful_stuff << "\n"; 

而且我可以用出入記錄日誌信息項:

LOG(INFO) << some_useful_stuff << "\n"; \\ gets echoed to stdout 

我不能在整個代碼庫中更改所有std::cout聲明(因爲我使用的是第三方的一些subrepos等,並且無法將它自己的日誌聲明添加到它們),這可以防止我使用if-else建設(無論如何,這將是醜陋的,包裝在邏輯中對每個輸出語句進行壓縮)。

那麼如何將stdout輸出複製到GLog?

std::cout << some_useful_stuff << "\n"; \\ message also goes to LOG(INFO) 

可能有用:我實際上並不需要在同一時間發生這種情況;選擇{CONSOLE,LOGS,BOTH}是很有用的,但我可以在{CONSOLE,LOGS}之間進行簡單的選擇。

另外 - 經驗豐富的程序員,但C + +新手,所以如果這是巨型簡單;道歉 - 並提前致謝!

+0

感謝您的編輯,@Borgleader ...擊敗了我對該更改;) – thclark

+0

[boost: :iostreams :: tee_device](http://www.boost.org/doc/libs/1_60_0/libs/iostreams/doc/functions/tee.html)對於同時寫入兩個數據流非常有用。基本上是兩個流的包裝。 – AndyG

回答

0

不確定glog,但通常我們使用dup2系統調用將一個文件處理程序的輸出重定向到另一個文件處理程序。

例如,在你的情況下,使所有std :: cout寫入glog使用的日誌文件只是做

dup2(glog_file_handler,stdout);

這將工作,如果你可以如何獲得glog正在寫入的日誌文件的文件句柄。有關更多詳細信息,請參閱http://man7.org/linux/man-pages/man2/dup.2.html

希望這會有所幫助。

P.S.如果你的程序有多個線程/處理程序寫入同一個glog文件,並且glog同步寫入日誌文件,這將不起作用

+0

謝謝@ A.N。 glog異步寫入;但我努力尋找谷歌庫中的文件處理程序!我會進一步調查。 – thclark