我想將stderr
重定向到文件AND和stdout
。go - 將stderr重定向到文件並輸出到標準輸出
我知道如何重定向stderr
使用dup2
到文件:
err := syscall.Dup2(int(fatal_logfile.Fd()), int(os.Stderr.Fd()))
但是當時我沒有看到這個其他時間如何重定向到stdout
。就像將一個流源複製到兩個不同的流中一樣。
注意,當應用程序啓動並用於重定向stderr
時,會調用此功能,例如發生panic
時。然後我不能在這種情況下使用recover
(即使因爲我正在運行大量goroutines)。
任何人有一個想法如何解決這個問題?
另一個工作溶液是調用二進制時使用pipes
和tee
,但可以具有在應用程序中所定義的相同的行爲/邏輯?我希望它以默認的方式運行。
./app_bin 2> >(tee -a fatal.log)
writer
將寫入
os.Stdout
和
os.Stderr
我認爲在應用程序之外處理這個可能會更好,根據需要重定向stderr。你可以用一些管道和副本來做到這一點,但是你現在有機會失去stderr輸出,而不是有一個單獨的非緩衝流。 – JimB
正確@JimB - 我剛剛更新了我的問題,包括運行二進制文件時重定向'stderr'的問題。可能是一個天真的問題,但我可以在應用程序中「導入」相同的邏輯嗎?我希望它以默認的方式運行 – damoiser
在程序之外執行此操作總是更加可靠。如果目標是在發生崩潰時捕獲輸出,那麼在程序退出之前,執行程序中的「tee」功能可能無法獲取數據。 – JimB