我正在尝试解析以下日志格式;我需要两个字段,两个字段都用以下格式表示:
"LOGTYPE":"LOGDATA"
在消息列下有一个非常长的消息,但我已经解决了它,只需要能够先将它隔离出来。
我当前的表达式遗漏了最后一个日志(主机名),或者如果我更正它以包含主机名,则会丢失一些格式。我总是可以在正则表达式查询之后纠正数据丢失,但是如果可能的话,我希望保持代码简洁。
以下是我的正则表达式尝试:
丢失主机名日志
/("\w*"):(.*?),/gi
Message,ChannelID,Hostname部分
上的结束格式不正确/("\w*"):(.*?)[,}]/gi
示例日志:
{“EventTime”:“2018-02-01 12:00:00”,“EventType”:“警告”,“EventID”:1,“SourceName”:“PrintfLogger”,“ProcessID”:1234,“ ThreadID“:1234,”Message“:”123456789:TESTING CurlPublishPoint:已发布http://host.sample.com/sample/test/folder275492/123456789_set_11/test.ts(0字节),在2203.000000 ms(总时间)中:0到11.22.3.444:0:seqNumber 99101:DNS时间:0.000000 s :连接时间0.000000秒:上传速度0.000000 B / s:长于RetryLimit false:段提前期3084 ms:cURL ErrorCode 28:cURL错误已达到超时:HTTP代码0:成功错误:尝试1:类型TS:文件大小123456 :剩余字节数123456:MediaId Service_Data_3:发布提前期1234 ms:Id 0:CURLOPT_LOW_SPEED_LIMIT 123456:重试限制9000 ms:cURL远程IP:低速时间3:cURL URL http://11.2.3.444/sample/test/1518718912_set_34/test_123456_78901.ts:会话计数634:线程ID 4172: MD5 123456789ABCDEFG1234567890HIJK1L:延迟0.000000s:CHID:{A1B2C3D4-E5F6-G7H8-I9J0-K1L2M3N4O5P6} “ ”操作码“: ”登录“, ”渠道ID“: ”{A1B2C3D4-E5F6-G7H8-I9J0-K1L2M3N4O5P6}“,” EventDesc “:” printf的 “ ”TaskDesc“: ”包“, ”主机名“:” A11B2-1234A56" }
答案 0 :(得分:1)
正如Haleemur Ali的评论中所述,这些数据是格式正确的JSON。他指出我是正确的方向,建议我把它当成一个。
使用以下函数将字符串转换为JSON对象,可以更轻松地处理。
logJSON = json.loads(inputstring)
在阅读文档之前,我使用以下视频熟悉Python中的JSON处理:https://www.youtube.com/watch?v=9N6a-VLBa2I