本文使用Python2.7解析nginx日志文件,并把nginx的时间转化为时间戳(1970纪元后经过的浮点秒数),并存放到特定文件中。
日志规则描述
Nginx的http日志格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ';
示例如下:
199.120.110.21 - - [01/Jul/1995:00:00:09 -0400] "GET /shuttle/missions/sts-73/mission-sts-73.html HTTP/1.0" 200 4085
解决思路
获取所有日志文件
这里使用Python的glob模块来获取所有日志文件。日志文件每天0时进行备份,命名为nginx.log.YYMMDD。
import glob
def readfile(path):
return glob.glob(path + '*')
获取日志中所有行
模块linecache允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。
import linecache
def readline(path):
return linecache.getlines(path)
解析每一条日志
使用python的re模块解析每一条日志。
正则表达式
ip_regex = r"?P[\d.]*"