apache日志解析器不适用于我拥有的日志文件

时间:2018-10-24 11:26:53

标签: python

您好,我正在尝试制作一个程序来为我清理一堆日志文件,但是我似乎无法获得这个简单的计数器来处理我拥有的日志文件。我对这种类型的编程还是不熟悉,但是我怀疑我可能为我的日志使用了错误类型的解析器。我以为它们是标准的Apache日志,但我一定弄错了。我附上了我的代码和日志文件的一部分,以防万一(检查IP地址)。谢谢

import apache_log_parser

parser = apache_log_parser.make_parser('%h %l %u %t "%r" %>s "%{User-agent}i"')   
count = 0

with open('sad-access_log-20180902.log') as in_f:
    for line in in_f:
        line = parser(line)
        count = count + 1

    print(count)

sad-access_log-20180902.log的内容:

********- - [26/Aug/2018:03:50:04 +0100] "GET / HTTP/1.1" 301 255
******** - - [26/Aug/2018:03:50:03 +0100] "GET /login/ HTTP/1.1" 200 5836
********* - - [26/Aug/2018:03:50:05 +0100] "GET / HTTP/1.1" 200 6812
************ - - [26/Aug/2018:03:50:11 +0100] "GET / HTTP/1.1" 200 6812

1 个答案:

答案 0 :(得分:0)

嗨,欢迎来到StackOverflow!请记住这是您的下一个问题

  • 在本网站上,最好将您遇到的所有相关错误消息都包括在内
  • 您包括了代码和输入数据-太好了!但是,您的代码格式不正确,这很糟糕,因为Python的缩进方式非常善变

也就是说,我们开始做生意。

  • 您的日志文件不包含UserAgent字符串。解析将失败。
  • %>s应该解析什么? >字符未包含在您的日志文件中
  • 如前所述,
  • 您日志中的最后一个字段不是UA;相反,它似乎更可能是响应的大小,因此我只使用了格式字符串。

此代码符合您的期望:

import apache_log_parser

parser = apache_log_parser.make_parser('%h %l %u %t "%r" %s %B')
count = 0

with open('foo.log') as in_f:
    for line in in_f:
        line = parser(line)
        count = count + 1
    print(count)

以防万一您没看过,这是apache_log_parserthe documentation的链接。