如何以规定的方式将测试日志文件转换为 json



我有一个日志文件,如下所示。试图获取第一个服务器详细信息192.168.1.1并检查它何时连接和断开连接。然后转到第二个服务器192.168.1.2详细信息并检查它何时连接和断开连接。像需要确定所有服务器的连接时间和断开连接时间

一样
str_ = '''Jan 23 2016 11:30:08AM - ssh 22 192.168.1.1 connected
Jan 23 2016 12:04:56AM - ssh 22 192.168.1.2 connected
Jan 23 2016 2:18:32PM - ssh 22 192.168.1.2 disconnected 
Jan 23 2016 5:16:09PM - un x Dos attack from 201.10.0.4
Jan 23 2016 10:43:44PM - ssh 22 192.168.1.1 disconnected
Feb 1 2016  1:40:28AM - ssh 22 192.168.1.1 connected
Feb 1 2016  2:21:52AM - un x Dos attack from 201.168.123.1
Mar 29 2016 2:13:07PM - ssh 22 192.168.1.1 disconnected'''

如何将我的日志文件转换为 json

我的预期

{1:{192.168.1.1:[(connected,Jan 23 2016 11:30:08AM),(disconnected,Jan 23 2016 10:43:44PM)]}, 2:{192.168.1.2:[(connected,Jan 23 2016 12:04:56AM),(disconnected,Jan 23 2016 2:18:32PM)]}, 3:{192.168.1.1:[(connected,Feb 1 2016 1:40:28AM),(disconnected,Mar 29 2016 2:13:07PM )]}, 4:{Dos:[201.10.0.4,201.168.123.1]}}

我的伪代码

import json
import re
i = 1
result = {}
with open('test.log') as f:
    lines = f.readlines()
    for line in lines:
        r = line.split('')
        #result[i] = {}
        i += 1 
print(result) 
with open('data.json', 'w') as fp:
    json.dump(result, fp)
  1. 为什么需要字典由条目编号键控{1: xxx, 2: yyy, 3: zzz}?我建议只使用列表 - [xxx, yyy, zzz] .您可以按索引等获取条目。从技术上讲,json 不能使用数字作为键。
  2. 没有逻辑可以在伪代码中对连接和断开连接的事件进行分组。
  3. 日志中的某些行没有连接/断开连接信息,因此您也需要一些逻辑。
  4. lines = f.readlines(); for line in lines:可能会占用大量内存来存储大型日志文件,只需使用for lines in f:

所以,我认为你需要这样的东西:

import json
import re
result = []
opened = {}
with open('test.log') as f:
    for line in f:
        date, rest = line.split(' - ', 1)
        rest, last = rest.strip().rsplit(' ', 1)
        ip = rest.rsplit(' ', 1)[1]
        if last  == 'connected':
            entry = {ip: [(last, date)]}
            opened[ip] = entry
            result.append(entry)
        elif last == 'disconnected':
            opened[ip][ip].append((last, date))
            del opened[ip]
print(result) 
with open('data.json', 'w') as fp:
    json.dump(result, fp)

它适用于您的示例,但需要对其他日志进行更多错误检查

最新更新