2008-09-08 29 views
4

我正在設計一個應用程序,其中包括需要記錄從Telnet連接收到的所有傳入消息。文本很簡單,儘管可以包含提供文本顏色和格式的ANSI標籤(16種顏色,粗體,下劃線等)。什麼是格式化日誌的好方法?

我想格式化我的日誌,以便日後存儲帶有格式,日期/時間和潛在其他元數據的文本。我的第一個想法是所有的XML,但這可能會影響我稍後編寫快速搜索工具的能力。我目前的想法是一個文件中的日期/時間+文本,元數據存儲在另一個XML文件中,由行號引用。

這是一個很好的解決方案嗎?另外,我應該在哪裏以及如何存儲格式化命令?原始的ANSI標籤會破壞純文本,但將它們放在兩個不同的文件中可能會很尷尬。

附加:由於迄今爲止的一些答案,儘管我應該提到大多數情況下,消息將是人與人之間的通信而不是系統消息。各種各樣的更原始的IRC。直到我的用戶稍後決定(通過添加元數據)哪些消息是重要的。這是過濾或編輯日誌可能來自的記錄日誌中的原始記錄。

回答

0

如果您正在爲將來的搜索和分析提供日誌信息,也許數據庫會是一個更好的答案。

至於你的解決方案。隨着數據庫規模的擴大,平面文件不能很好地擴展。我不會分裂這些文件,這隻會增加可伸縮性問題。如果您必須使用平面文件,我可能會嘗試將元數據保存爲csv(較少),以及由csv文件索引的一系列文件中的數據。這樣所有的數據都不會影響你的索引文件。只是我的想法。

+0

我將在以後添加文件的自動分割。針對這種情況的數據庫有點沉重,我希望日誌能夠獨立存在。 – Nidonocu 2008-09-08 21:45:02

1

天兒真好,

肯定做平面文件記錄,並添加Munge時間腳本後把它變成XML。

第一個建議是確保所有日期/時間字符串都採用ISO 8601格式,即YYYY-MM-DD hh:mm:ss。

其次是讓你的類別,例如異常,致命,錯誤,警告,信息等真正在您的日誌中脫穎而出。

然後,看看一些vim語法文件併爲您的日誌格式創建一個新的語法,以便重要的日誌條目真正脫穎而出。

採用標準語法文件之一併修改它來處理日誌字符串並不難。

HTH。

歡呼聲,

羅布

2

我的第一個建議是使用一個下拉測井儀像log4net的,這將使格式更加自動化。

如果你打算去兩個文件的路線(並且我同意克雷格說數據庫可能是一個更好的選擇),你可以通過讓一個文件與你一樣稀疏,爲自己節省很多心痛可以用於以後的快速搜索,也可以將所有信息保存在一個地方(元數據和數據),而不是創建僅用於元數據的格式。

0

我打算「拆分圍牆」,並說你的所有分析/歸檔日誌條目(如Telnet通信)都要使用數據庫。這將爲您提供全文搜索,列和搜索數據的簡便方法。

對於任何調試/關鍵錯誤類型日誌,請使用平面文件(或XML格式,因爲該文件不應該太大)。

如果你的數據庫連接斷了,或者你的表結構出了問題,登錄到數據庫將毫無意義。如果你正在尋找一個稍微更「輕量級」的解決方案,你可以使用SQLite來記錄你所有的telnet流量,這樣你就可以利用數據庫結構的優勢,但也有可用性的文件。

隨着對log4net的另一個點頭,你可以很容易地用ADO appender完成它。

0

我不確定你想要完成什麼。 Telnet通常被認爲是一個字符一次性的協議,所以當你說「傳入消息」時,你的意思是每個字符都是一個消息?或者整個用戶的會話是一條消息?

我會做一些暗示。 您有用戶通過telnet登錄,並且想要捕獲他們在登錄時執行的所有操作。稍後,您希望能夠將他們與該用戶所做的事情以及他們所做的時間和日期相關聯。您需要稍後才能找到「誰是'rm *'作爲根用戶?」

我會將每個用戶的會話存儲爲一個單獨的文件,命名約定包括用戶的登錄名和時間戳。

例如2008_09_08_14_52_07_nidonocu

在文件中,我會捕獲每個接收到的字節,假設它們大部分都是純文本字符。

例如

ls 
cd www 
ls 
vi index.html 
/copyright 2007 
llllllllllllr8:wq 
exit 

將8位ANSI字符寫入文件中。你應該可以使用文本編輯器和grep來進行基本的審計和搜索。如果您需要實際讀取8位數據,則​​可以使用二進制文件查看器或稍後更復雜。

備份,歸檔,清除等都可以使用常規文件系統工具和腳本來完成。

我很抱歉,如果我的假設是錯誤的。

-
布魯斯

相關問題