使用Python处理Nginx日志

Nginx日志中包含每个HTTP请求的客户端地址、时间、请求方法和页面、返回状态码、返回数据大小,UserAgent这些信息,本文的目的是在Python中使用正则表达式对这些信息进行格式化处理。

示例代码如下:

import re

def extract_nginx_log(log):

    regex = re.compile(
        '''(?P<remote_addr>[\d\.]{7,})\
 - - (?:\[(?P<datetime>[^\[\]]+)\])\
 "(?P<request>[^"]+)" (?P<status>\d+)\
 (?P<size>\d+) "(?:[^"]+)"\
 "(?P<user_agent>[^"]+)"''')

    return regex.match(log).groupdict()

with open('access.log','r') as fp:
    for line in fp.readlines():
        print(extract_nginx_log(line)['remote_addr'])

这段代码将打印Nginx日志文件里的所有访问IP地址;

extract_nginx_log() 函数用于处理单条日志,返回一个字典:

{
    'remote_addr'   :'', #访问者地址
    'datetime'      :'', #访问时间
    'request'       :'', #请求方法和页面
    'status'        :'', #返回状态码
    'size'          :'', #返回数据大小
    'user_agent'    :''  #UserAgent
}

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/use-python-to-process-nginx-log.html

分类: 计算机技术
推荐阅读:
Kali更换国内源 默认情况下,kali系统使用的是官方提供的源,有的时候速度不错,有的时候速度不敢恭维,所以最好是将Kali源更改为国内的,这样安装软件和更新程序都可以享受到非常快的速度;
Python float()函数 在 Python 中,float()是一个内置函数,用于将字符串、整数或其他数字类型转换为浮点数类型。
Rust:cannot assign twice to immutable variable `x`错误解决方法 在rust语言中,变量默认情况下是不允许被改变的,当你试图修改一个不可变变量时,将造成 error[E0384]: cannot assign twice to immutable variable `x` 这样的错误;
Python __import__()函数 __import__() 函数是一个高级函数,用于动态地导入模块。与 import 语句不同,__import__() 函数可以在运行时动态地导入模块,使得程序可以更加灵活地处理模块的导入。
Python print()函数 print() 函数是 Python 内置函数之一,用于输出指定的对象。它可以接受多个参数,用逗号分隔,它们将被依次输出,并且默认情况下它们之间会用空格分隔。在输出完成之后,print() 函数会自动在末尾添加一个换行符。
Rust cfg宏的用法和示例 在Rust中,cfg宏用于条件编译,允许根据不同的条件在编译代码时选择性地包含或排除特定的代码块;这对于处理不同平台、操作系统、编译器或其他环境变量的情况非常有用。