2016-02-23 27 views
1

我們使用boost.log V2的簡單版本 BOOST_LOG_TRIVIAL(嚴重)< < ...BOOST_LOG_TRIVIAL(嚴重)<< ......不重定向到文件

目前我們不會喜歡創建一個單獨的接收器或輸出文件,有時將控制檯輸出重定向到一個文件對我們來說已經足夠了。在使用boost.log v1.59的CentOs 7下,我們已經注意到很多時候輸出沒有重定向,但是在使用各種重定向選項(如<executable> 2>&1 out.txt等)時完全丟失。文件以零長度結束,並且自然不存在屏幕輸出。

有沒有人觀察到這種行爲?有沒有已知的修復?非常感謝, filimon

回答

-1

語法2>&1 out.txt是不是如何重定向輸出到文件。如果要將stdout和stderr都重定向到一個文件,則需要執行>& out.txt>out.txt 2>&1。第一種形式不受所有炮彈支持,但第二種形式應該是。

+1

謝謝,這只是一個例子,沒有任何已知的重定向方法工程嘗試許多不同的有經驗的UNIX用戶。所以這個問題與這個語法無關。我們經常使用其他std :: cout或std :: cerr語句重定向輸出,因爲這些年來沒有問題... – filimon

+0

Boost.Log中的默認接收器將輸出寫入標準輸出,如代碼中所示,所以問題顯然有些問題如何重定向輸出或如何在應用程序或其父級中設置標準輸出流。另外,驗證日誌實際上是由應用程序寫入的,而不是,例如過濾掉。 –

0

謝謝,我已經看到,微不足道的日誌記錄基本上是std :: cout,這就是爲什麼我感到驚訝它不能按預期工作(並且我還向那些抱怨的同事解釋了它)。日誌記錄輸出在控制檯上完美地適用於我們。不知道你的意思是「在應用程序或其父代中設置標準輸出流」,我只在我的main()函數中執行boost :: log :: core :: get() - > set_filter(boost: :log :: trivial :: severity> = vm [「boost_log_level」]。as());

,這將按預期的控制檯嚴重性級別的不同命令行設置簡單地做BOOST_LOG_TRIVIAL(...)< <當...

在哪裏看更詳細任何特定指針調試這個?它可能是一些線程相關的問題,我從一個線程得到我的初始化消息,但似乎錯過了另一個線程的,因爲我說這隻發生在重定向時,我可以愉快地看到來自控制檯中所有不同線程的消息...

+0

我的意思是「在應用程序或其父項中設置標準輸出流」是,如果你使用'fork' +'exec'從另一個進程運行你的應用程序,那麼你應該看看你是否正在做一些特殊的事情標準的IO描述符也是如此。 –

+0

嗨,我們實際上是這樣開始的:crontab script1.sh - > script2.sh在script2.sh中我們有nohup進程>> log.txt 2>&1&。 nohup可以解決這個問題嗎?有沒有辦法將庫中的流替換爲控制檯輸出的stderr而不是stdout? – filimon

+0

是的,nohup可能是原因。看到它的手冊頁。 http://linux.die.net/man/1/nohup –

0

這是解釋發生的事情不是可以做什麼。輸出緩衝,這就是爲什麼你不能看到文件中的任何東西,但可以在控制檯中看到。等待它達到4096字節。需要一些刷新緩衝區的方法...