使用python日志记录,我创建了json格式的日志文件。每行是一个有效的json,整个日志只是许多行的json。它基本上是从一些传感器记录dta。我的代码还控制这些传感器的一些设置。 创建记录器按下面的例子:Python json日志的创建和处理
import logging
import logging.handlers
from pythonjsonlogger import jsonlogger
formatter = jsonlogger.JsonFormatter('%(asctime)s %(name)s %(message)s')
log = logging.getLogger('MSG')
log.setLevel(logging.INFO)
fh = logging.handlers.RotatingFileHandler(
filename='C:\\TEMP\\LOG\\test.log', maxBytes=2097152, backupCount=5)
fh.setFormatter(formatter)
log.addHandler(fh)
res = logging.getLogger('RES')
res.setLevel(logging.INFO)
res.addHandler(fh)
stg = logging.getLogger('SET')
stg.setLevel(logging.INFO)
stg.addHandler(fh)
通过我的代码创建日志文件和上面的记录器看起来或多或少是这样的:
{"asctime": "2016-05-13 11:25:32,154", "name": "SET", "message": "", "VAR": "Vdd", "VAL": "1"}
{"asctime": "2016-05-13 11:25:32,155", "name": "MSG", "message": "writting new setting successful"}
{"asctime": "2016-05-13 11:25:32,155", "name": "RES", "message": "", "VAR": "TEMP", "VAL": "23"}
{"asctime": "2016-05-13 11:25:32,157", "name": "RES", "message": "", "VAR": "LUX", "VAL": "150"}
{"asctime": "2016-05-13 11:25:32,159", "name": "SET", "message": "", "VAR": "Vdd", "VAL": "2"}
{"asctime": "2016-05-13 11:25:32,164", "name": "MSG", "message": "writting new setting successful"}
{"asctime": "2016-05-13 11:25:32,166", "name": "RES", "message": "", "VAR": "TEMP", "VAL": "25"}
{"asctime": "2016-05-13 11:25:32,171", "name": "RES", "message": "", "VAR": "LUX", "VAL": "170", "extra": "OV detected"}
{"asctime": "2016-05-13 11:25:32,177", "name": "SET", "message": "", "VAR": "Vdd", "VAL": "3"}
{"asctime": "2016-05-13 11:25:32,178", "name": "MSG", "message": "writting new setting successful"}
{"asctime": "2016-05-13 11:25:32,178", "name": "RES", "message": "", "VAR": "TEMP", "VAL": "28"}
{"asctime": "2016-05-13 11:25:32,178", "name": "RES", "message": "", "VAR": "LUX", "VAL": "190"}
现在我的第一个问题。我可以确定日志文件中的行会按照它们在Python代码中执行的顺序编写吗? (当我简单地向控制台“打印”时,这并非总是如此)。如果不是如何确保?我试图扫描时间戳的连续性,但我注意到甚至高达四行可以有相同的时间戳。如您所见,我正在设置一个参数记录器('SET')Vdd = 1 .. 3并读取一系列测量结果记录器('RES')Temp,Lux。所以我的第二个问题是,如果我想创建一个csv文件或者只是创建一个堆栈图(Temp,Lux)vs Vdd,解析这个日志文件的最好方法是什么? (请注意,在每个日志行中可能有不同数量的键,可能有日志消息,因此必须对日志行进行过滤,并且日志文件可能很大) 我希望该过程具有通用性和灵活性有可能,我设定的参数可以被嵌套:
SET A
SET B
READ C
READ D
SET B
READ C
READ D
SET A
SET B
READ C
READ D
SET B
READ C
READ D
我用下面简单的代码,但有一个更有效的方式来做到这一点?
import json
data = []
with open('file') as f:
for line in f:
#lots of strange line filtering and keyword selection here
#in order to build Temp vs Vdd table, etc...