2010-07-06 87 views
3

我正在Linux下開發,對磁盤使用的限制非常嚴格。我希望能夠將日誌記錄指向固定大小的文件。例如,如果我的應用程序輸出所有日誌到標準輸出:在Linux下調試:是否存在類似tty的循環緩衝區實現?

~/bin/myApp > /dev/debug1 

,然後,看到輸出的最後量:

cat /dev/debug1 

會寫出然而,許多字節DEBUG1是設置保存(如果至少在那裏寫了很多東西)。

This post建議使用expect或其庫,但我想知道是否有人看過「僞tty」設備驅動程序類型的實現,因爲我不希望將更多的庫綁定到我的可執行文件。

我意識到還有其他機制,如logrotate,但我寧願有一個非cron的解決方案。

指針,建議,問題歡迎!

回答

1

也許你可以使用mkfifo來實現你想要的東西,以及用適當的緩衝區讀取管道的東西。我沒有嘗試,但less --buffers=XXXXXX可能適用於此。

+0

不錯的建議!不幸的是,似乎重定向到一個命名管道導致我想要避免的:該過程開始於非交互模式,並緩衝輸出(我認爲默認值爲4K)。 – 2010-07-07 13:08:20

+1

當你說「非交互模式」時,你的意思是說普通輸出也被重定向到那個命名管道,或者某種程度上應用程序檢測到它的標準輸出被重定向,因此行爲有所不同(我不知道這是可能的) ? (通過關閉stdin可以檢測到沒有控制檯(輸入)。) 如果問題是日誌與標準輸出混合在stdout上,則應該更改應用程序以將日誌發送到stderr上(並使用'2>'進行重定向),如果可以的話。 – Bruno 2010-07-07 14:02:33

+1

如果您不能將日誌更改爲stderr,則可以使用'script'命令(http://linux.die.net/man/1/script)或'屏幕「,並可能配置緩衝區以滿足您的需求。 或者,如果您的日誌具有特定的文本模式,則可以使用命名管道,「tee」(要發送到控制檯和命名管道)和「grep」的組合來分割它們和常規輸出/'grep -v'來過濾輸出。 – Bruno 2010-07-07 14:05:07