Nginx的http日志格式:
示例如下:
这里使用Python的glob模块来获取所有日志文件。日志文件每天0时进行备份,命名为nginx.log.YYMMDD。
模块linecache允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。
使用python的re模块解析每一条日志。
其中body_bytes捕获非空字符串,而不是数字,因为日志里可能存在该字段值为“-”,即没有请求体。
date、method、request等参数可以采用以下方式进行提取。
使用python的time模块把时间转为时间戳。
产生文件time.log,内容如下:
更多的信息,可以参考python内部的json文档:
python>>>help(json)
或者官方文档:
http://docs.python.org/library/json.html#module-json
下面给出一个使用python解析json的简单例子:
#!/usr/bin/pythonimport json
#Function:Analyze json script
#Json is a script can descript data structure as xml,
#for detail, please refer to "http://json.org/json-zh.html".
#Note:
#1.Also, if you write json script from python,
#you should use dump instead of load. pleaser refer to "help(json)".
#json file:
#The file content of temp.json is:
#{
# "name":"00_sample_case1",
# "description":"an example."
#}
#f = file("temp.json")
#s = json.load(f)
#print s
#f.close
#json string:
s = json.loads('{"name":"test", "type":{"name":"seq", "parameter":["1", "2"]}}')
print s
print s.keys()
print s["name"]
print s["type"]["name"]
print s["type"]["parameter"][1]
1、说明:
python3通过json模块load函数来解析文件。
2、代码示例:
首先编写一个json文件j.txt,内容如下:
{"errno":1,"errmsg":"操作成功!","data":[]}
python代码如下:
import jsonwith open('j.txt', 'r') as fr:
o = json.load(fr)
print(o['errno'])
print(o['errmsg'])
print(len(o['data']))
输出如下:
1
操作成功!
0
3、函数说明:
load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
反序列化fp(一个.read()包含 - 支持类文件对象一个JSON文件),以一个Python对象。
object_hook是将与被调用的可选功能任何对象文本解码(一个``dict``)的结果。返回值object_hook将用来代替dict。此功能可用于实现自定义解码器(例如JSON-RPC级提示)。
object_pairs_hook是将与被调用的可选功能任何对象的结果与对的有序列表字面解码。该的返回值object_pairs_hook将用来代替dict。
此功能可用于实现依赖于定制解码器命令该键和值对被解码(例如,collections.OrderedDict会记得插入的顺序)。如果object_hook也定义了object_pairs_hook优先。
要使用自定义JSONDecoder子类,与cls指定它kwarg否则JSONDecoder使用。
4、其它说明:
也可以使用json.loads函数来直接处理字符串,方法如下:
o=json.loads('{"errno":0,"errmsg":"操作成功!","data":[]}')