[英]How to pattern multiline XML using RegEx in NXLog
我正在嘗試使用nxLog解析器to_json()將自定義日志文件解析為JSON,以便隨后將其發送到我的ElasticSearch實例中。 我將把它們分為三個單獨的字段,日期,日志類型指示符和消息。
以下是這些日志的格式。
9/10/2015 11:30:05 AM [0-1-1-Pos.xaml.cs-1607] Post button clicked
9/10/2015 11:30:17 AM [0-3-1-SecondaryPortStatus.cs-47] <TRANSACTION>
<FUNCTION_TYPE>SECONDARYPORT</FUNCTION_TYPE>
<COMMAND>STATUS</COMMAND>
<MAC_LABEL>XX</MAC_LABEL>
<MAC>xOel7QeyKoXaddiyrEeWKRI1DlF9sHzUNfZHFI/gAko=</MAC>
<COUNTER>XXX</COUNTER>
</TRANSACTION>
9/10/2015 11:30:17 AM [0-3-1-SecondaryPortStatus.cs-57] <RESPONSE>
<RESPONSE_TEXT>Operation SUCCESSFUL</RESPONSE_TEXT>
<RESULT>OK</RESULT>
<RESULT_CODE>-1</RESULT_CODE>
<TERMINATION_STATUS>SUCCESS</TERMINATION_STATUS>
<COUNTER>221</COUNTER>
<SECONDARY_DATA>12</SECONDARY_DATA>
<MACLABEL_IN_SESSION>P_061</MACLABEL_IN_SESSION>
<SESSION_DURATION>00:00:16</SESSION_DURATION>
<INVOICE_SESSION>XX</INVOICE_SESSION>
<SERIAL_NUMBER>XX</SERIAL_NUMBER>
</RESPONSE>`
我已經可以使用PERL regex語法解析日期戳和錯誤選擇器(括號內的所有內容),如下所示。
1. ^(\d\d|\d)/(\d\d|\d)/(\d\d\d\d)\s(\d\d|\d):(\d\d|\d):(\d\d|\d)\s(AM|PM)
2. \[(.*)\]
但是我不知道如何在選擇器和新行之間提取所有內容。 因此,在這種情況下,我希望消息是直到換行符為止的XML代碼。 有人對我如何檢索數據有建議嗎?
您應該能夠使用nxlog的xm_multiline模塊並在HeaderLine指令中指定regexp。 如果將捕獲規則添加到正則表達式以匹配XML部分(在[..]之后 ),則應該能夠使用xm_xml的parse_xml()解析XML。
還有一個類似的例子在這里 。
嘗試使用多行ReGex執行此操作:
$ perl -0777 -ne 'print $& if !<RESPONSE>.*</RESPONSE>!s' file
將輸入/輸出分隔符設置為undef
(-0777)將在內存中提取整個文件
<RESPONSE>
<RESPONSE_TEXT>Operation SUCCESSFUL</RESPONSE_TEXT>
<RESULT>OK</RESULT>
<RESULT_CODE>-1</RESULT_CODE>
<TERMINATION_STATUS>SUCCESS</TERMINATION_STATUS>
<COUNTER>221</COUNTER>
<SECONDARY_DATA>12</SECONDARY_DATA>
<MACLABEL_IN_SESSION>P_061</MACLABEL_IN_SESSION>
<SESSION_DURATION>00:00:16</SESSION_DURATION>
<INVOICE_SESSION>XX</INVOICE_SESSION>
<SERIAL_NUMBER>XX</SERIAL_NUMBER>
</RESPONSE>
BEGIN { $/ = undef; $\ = undef; } # input/output separator as undef
while (defined($_ = <ARGV>)) {
print $& if m[<RESPONSE>.*</RESPONSE>]s;
}
perldoc perlre
的修飾符“ s” s Treat string as single line. That is, change "." to match any
character whatsoever, even a newline, which normally it would not
match.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.