2016-03-31 57 views
0

首先閱讀下面列出的文章,以瞭解使用core perl編寫文件的用戶。Perl:使用core perl工具擦除日誌文件中的行

- http://perlmaven.com/writing-to-files-with-perl

- http://perlmaven.com/appending-to-files

我有一個疑問。在我的情況下,我需要寫一個日誌文件,但必須是一個光日誌,我的意思是例如50行文本。

所以每一個交互都是必要的,擦除第一行並寫入日誌的底部。

你用什麼參數來做到這一點?

我的想法是從日誌中獲取所有數據,並放入一些像array這樣的變量並刪除第一個值,然後使用open(FILEHANDLE,">filename");再次對日誌進行轉寫。

有沒有一種perl方法使用唯一的核心工具來完成這項工作?

謝謝。

+2

這通常由「日誌旋轉」處理。在線搜索;有很多方法可以解決這個問題(當你達到一定的文件大小時創建新的日誌,或者每小時創建一個新的日誌等等)。還有一個Perl模塊,Log4perl,但我認爲它並不包含在任何標準的發行版中。 – sferencik

回答

1

這是非常低效的,因爲正如你已經正確計算出的 - 唯一的方法是重寫日誌文件,而不是第一行。

如果這就是你所做的一切,那麼tail +2將會訣竅。

但是我建議每次向它添加一行時重寫一個日誌文件是相當低效的,而且你最好做的事情是寫多個並刪除舊的。

例如爲:

  • stat的文件,以獲得一個大小,因爲你正在閱讀的元數據,而不必讀取文件內容。
  • 如果尺寸大於預定義的限制(50行×80個字符寬度將是4000個字節),則打開一個新文件。
  • 列出其餘文件,如果有「太舊」,請刪除它們。 (保持'當前'和'以前',你將總是有4000-8000字節的'日誌')

雖然失敗了,但你可以用你建議的方式重寫日誌文件。請注意,如果您這樣做,日誌空白/零長度時會有一段短暫的時間。此外,您永遠無法在日誌上運行tail -f