2013-11-27 55 views
1

我有巨大的日誌文件(在演出中)有一個標題(標記信息的開始),然後信息如下。它隨機分佈在整個文件中通過信息可以發生在日誌文件的任何地方)。它也有一個父級子級。我需要解析和處理該日誌的基礎上寫入識別部分/標題的開頭模式,因此處理這將follow.The問題在這裏我必須匹配所有的一切寫的正則表達式的信息,正則表達式的信息對每一行日誌文件分段以確定哪一部分被觸發。 這種做法是非常緩慢的,也遇到了,因爲沒有什麼的將於明年從日誌中,當有一個層次。我也曾想過辦法的通過將文件索引文件它放大的智能理念的問題到遞歸塊(分治),並將其分配給多個演員(斯卡拉)並在每行可以對所有並聯的正則表達式(代表段的開始)。我想知道如何高效匹配的是方法和想要更多的輸入來提高性能。在這裏的參考是日誌文件可能出現的模式::有效地解析大型日誌

Section1 
-------------- 
Info for section1 
.. 
... 
.... 
. 
. 
Section2 
-------------- 
Info for section2 
.. 
... 
.... 
. 
. 
Section3 
================= 
Info for section3 

Child1 of section3 
-------------- 
Info for child of section3 

Child2 of section3 
---------------- 
Info for child of section3 

Child1 of child2 which is child of section3 
......................... 
Info for child1 of child2 which is child of section3 

Section1 
--------------  //Section1 reappears 
Info for section1 
.. 
... 
.... 
. 
. 

回答

-1

您需要更改文件格式。我建議存儲在RDBMS或MongoDB的作爲是最簡單的解決方案以此爲結構化數據,但如果你想使用自己的日誌格式,你需要讓你知道每個塊的開始和結束構建它,並且部分/孩子號碼是結構化的,所以你不需要使用正則表達式。

以下是一種可能的解決方案。每個單獨的塊是一個JSON對象,並存儲在它自己的行中。因此,文件中的行可能如下所示:

{"section": "1", "path": "/", "info": "Info for section1\nNext Line of info\nAnd so on..."} 
{"section": "3", "path": "/child2/child1", "info": "Info for child1 of child2 which is child of section3"} 
+0

約束是它的原始日誌並且不能重新構造它。此外,如果文件非常龐大,那麼讀取並重新構造它,然後再讀取它以處理/排除**數據會使其真正緩慢。 –

+0

唯一的其他想法我是嘗試所有的正則表達式概括成一個,像'科(\ d +)'。什麼標誌着當前系統中某個塊的結束?只是一個新的開始? – wingedsubmariner

+0

它可能是一個新的開始或結束正則表達式也可以定義,但最終正則表達式是可選的,這應該被保留。 –