我想通過使用番石榴分離器來解析日誌文件。日誌文件看起來是這樣的:番石榴分配器與包含在字符串中的分割符字符的鍵值映射
appName=XXX clientIp=X.X.X timestamp="2017-06-05T13:22:12-07:00" request="POST /forward HTTP/1.1" statusCode=204 bytesOut=1167 totalTime=0.062 bytesIn=1289 sourceHost=XXXX connId=49936598 connReqs=9 upInstance=XXX:104:XXX-XXX:8664:17F34 upConnectSec=0.052 upAddr="XX.XX.XX:123" upHost="vcv08it-cvcv2801:8464" upHdrTimeSec=0.058 upRespTimeSec=0.058 pid=32561 upStatusCode=204 message="Access Log" corrKey=GMIFCDIKRZR2T4VZQXJA2IT6 upCached=- length=0 partition=XXX location="= /v1/tXXXX" xff="XX.XX.XX.XX" referer="-" user-agent="Apache-HttpAsyncClient/4.1.1 (Java/1.8.0_131)\" rateLimitCurrentValues="--" rateLimitTimeMs=\"-:-"
我用這個代碼解析它:
Map<String, String> parserMap;
parserMap = Splitter.onPattern("\\s(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)")
.omitEmptyStrings()
.withKeyValueSeparator(Splitter.onPattern("="))
.split(line);
我的問題是位置=「=/V1/TXXXX」字段具有「=」裏面的字符串和withKeyValueSeperator當前不能解析它。你能幫我解釋一下,我應該如何改變模式以正確地獲得所有的字段?
如果你能完成這項工作,我會感到有些吃驚。你可能需要一些定製的,足夠聰明的來處理這個問題。 –
@LouisWasserman,不需要使用花哨的東西...與常規的正則表達式是可行的 –