2012-08-24 76 views
0

我在寫一個Log Unifier程序。也就是說,我有一個生成日誌的系統: my.log,my.log.1,my.log.2,my.log.3 ...一對一對應的文件 - 在unix中 - 日誌文件

我想在每次迭代中存儲數量我從某個文件中讀取的行,以便在下一次迭代 - 我可以繼續從那個地方閱讀。

的問題是,當這些文件都滿了,他們推出: 最後的日誌被刪除 ... my.log.2成爲my.log.3 my.log.1變得my.log。 2 my.log變得my.log.1 和新my.log創建

我可以ofcourse讓他們的跟蹤,使用的inode - 這幾乎是一到一一對應的文件。

我說「差不多」,因爲我擔心以下情況: 在我的兩次迭代之間 - 某些文件被刪除(假設記錄速度非常快),然後創建新文件,並且一些文件中包含inode剛剛刪除的文件。現在的問題是 - 我會將這些文件誤認爲舊文件 - 並從500行(例如)開始讀取,而不是0.

所以我希望找到一種方法來解決這個問題 - 這裏有幾個方向我想過 - 這可能會幫助你:

  1. 除了inode以外的其他1對1對應關係。

  2. 標記文件的能力。我想過使用chmod + x將文件標記爲 現有文件,對於沒有這些權限的新文件 - 我將知道它們是新的 - 但是如果有人要手動更改權限,那會混淆我的程序。所以如果你有任何其他的方式來標記。

  3. 我曾想過如何創建指向刪除文件時被刪除的文件的軟鏈接。這將讓我知道哪些文件被刪除。

  4. 任何方式來獲得「創建日期」

  5. 想到的任何想法 - 也許使用時間戳,的atime,的ctime,修改時間以某種巧妙的方式 - 都將是很好的,只要他們將讓我知道哪些文件是新的,或者創建與文件一一對應的任何想法。

謝謝

回答

1

我能想到的幾個備選方案:

  • 使用POSIX extended attributes來存儲你的程序可以使用它的操作每個日誌文件的元數據。

  • 應該是一個安全的假設,即舊日誌文件的內容在歸檔後不會被修改,即在my.log變爲my.log.1之後。您可以爲每個文件(例如SHA-256)生成一個散列來唯一標識它。

  • 所有像樣的日誌格式在每個條目中嵌入一個時間戳。您可以在文件中使用第一個條目的時間戳 - 甚至整個條目本身 - 以便識別。日誌文件通常定期滾動,這將確保每個文件的啓動時間戳不同。