2012-01-19 93 views
0

我正在處理將解析日誌文件的任務。在Java中解析以下日誌字符串的最佳方法是什麼?在Java中解析以下日誌條目的最佳方法是什麼?

EMPLOYER : NAME  : Company   ID : 23     TYPE  : Academy 
       FOUNDED : 2012-01-05 11:01:18.658     CATEGORY : College 
    EMPLOYEE : NAME  : John          TIN  : 123456 
       GENDER  : Male          STATUS : Prob 
    COMMENT : Data sent to 192.168.0.1:8088 
    USER DATA : Any string. 

我特別關注的是出現在「創建」關鍵字「僱主」和「僱員」(我不需要)和冒號和「註釋」字段(如果萬一我將使用冒號作爲分隔符)。

謝謝!

+0

需要更多的細節。例如,你有沒有現在使用的技術?日誌是否包含其他文本?涉及多少數據?數據看起來像一個固定的格式/字符位置日誌,是這樣嗎? – drekka

+0

你需要提取什麼?是否重複部分與您所描述的完全相同? –

+0

嗨。我對鍵值對感興趣名稱=公司,ID = 23,類型=學院等。這是一個日誌條目的示例,並且文本文件中包含大量這些日誌條目。我將使用我正在構建的Java應用程序解析這些日誌文件。是的,這是一個固定格式/字符定位日誌。謝謝! – amor214

回答

2

對於類似的東西沒有任何最好的方法。這顯然是專用的格式,沒有系統的元結構(與XML相比,例如...)

您可以嘗試正則表達式,但我擔心它們會變得太複雜。

您可以使用解析器生成器,但這可能超出了您目前的功能。 (否則你自己也會這樣。)

相反,我建議使用Java的Scanner類實現解析器。上下文敏感的分隔符的問題可以通過來解決,根據你下一步的期望改變分隔符正則表達式,或者通過使用Scanner.nextLine()得到該行的其餘部分,而不管分隔符如何。


像這樣的問題的其中一個問題是,您沒有明確定義的格式。相反,你剛剛向我們展示了一個簡單的例子。這個例子可能是典型的,但它不處理邊緣情況。 (您至少已經確定了其中的一個。)而且這也增加了無法在不將「業務知識」嵌入解析器中的情況下解析日誌文件條目的可能性;例如該日期將始終以特定格式顯示,或者公司名稱不會包含冒號。如果你實際上不知道這些規則是什麼(例如,因爲它們沒有在任何地方被恰當地指定),那麼你的解析器將是脆弱的。

相關問題