使用空格作为分隔符解析nginx日志数据

时间:2013-02-22 11:25:55

标签: python nginx logparser

我正在尝试从nginx日志文件中解析以下格式:

10.0.0.1    [02/Oct/2012:10:21:46 +0000]    GET /api/123/test.json?stop=2012-09-29  502 0

我的python脚本:

#!/usr/bin/env python

f = file('slow-queries.txt', 'r')

# iterate over the lines in the file
for line in f:
    # split the line into a list of column values
    columns = line.split(' ')
    # clean any whitespace off the items
    # columns = [col.strip() for col in columns]

    # ensure the column has at least one value before printing
    if columns:
        print "first  =>", columns[0]  # print the first column
        print "second =>", columns[1]

基本上我想从日志文件中得到的是发送的查询,所以在上面的例子中,我想要提取/api/123/test.json?stop=2012-09-29

我的脚本似乎没有这样做,我做错了什么?

2 个答案:

答案 0 :(得分:3)

这些是制表符,而不是空格:

ip, date, method, path, status, _ = line.split('\t')

答案 1 :(得分:1)

你做错了是使用通用编程语言,其中有专门的日志文件解析器语言:awk;)

awk '{ print $5 }' /path/to/slow-queries.txt

当然可以使用python / php / perl / YOUR AD HERE /但是awk总是会执行它们^^

编辑: 甚至可能将结果传递给一个新文件,然后由你的python脚本使用:

awk '{ print $5 }' /path/to/slow-queries.txt > /tmp/queries.txt