1

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

私のスクリプトはこれを行っていないようですが、何が間違っているのですか?

4

2 に答える 2

3

これらはタブであり、スペースではありません。

ip, date, method, path, status, _ = line.split('\t')
于 2013-02-22T11:28:28.600 に答える
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
于 2013-02-22T11:36:53.767 に答える