欢迎访问宙启技术站
智能推送

Python中的HTTP服务器日志记录技术

发布时间:2023-12-25 10:31:19

在Python中,可以使用内置的http.server模块来创建一个简单的HTTP服务器。该模块中提供了两个类HTTPServerBaseHTTPRequestHandler,可以方便地创建和处理HTTP请求。同时,Python可以使用标准库中的logging模块来记录日志。下面是一个使用例子,演示如何创建一个带有日志记录功能的HTTP服务器。

首先,我们需要导入所需的模块和库:

import http.server
import logging
import argparse

然后,我们需要定义一个自定义的HTTPRequestHandler类,继承自BaseHTTPRequestHandler,并重写其中的do_GET方法,用于处理GET请求。

class MyHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        # 处理GET请求
        logging.info("Received GET request from %s" % self.client_address[0])
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(b"Hello, world!")

do_GET方法中,我们首先记录日志,然后发送200成功响应的状态码和相应的头部,最后发送响应的具体内容。

接下来,我们需要定义一个run函数,用于启动HTTP服务器,并设置日志记录的相关配置。

def run(server_class=http.server.HTTPServer, handler_class=MyHTTPRequestHandler, port=8000):
    # 设置日志记录的配置
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s %(levelname)s %(message)s',
                        filename='server.log',
                        filemode='a')
    
    # 创建HTTP服务器实例
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    
    # 启动HTTP服务器
    logging.info("Starting server on port %d..." % port)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    
    # 关闭HTTP服务器
    httpd.server_close()
    logging.info("Server stopped.")

run函数中,我们首先设置日志记录的配置。其中,level=logging.INFO表示只记录INFO级别及以上的日志信息,format='%(asctime)s %(levelname)s %(message)s'表示日志的格式为时间、日志级别和消息,filename='server.log'表示将日志记录到server.log文件中。

然后,我们创建一个HTTPServer实例,并指定服务器的监听地址和端口。

接着,我们使用serve_forever方法启动HTTP服务器,并在启动之前记录日志。

最后,我们在捕获到用户停止服务器的KeyboardInterrupt异常时,关闭HTTP服务器,并记录日志。

最后,我们使用命令行参数解析库argparse来解析命令行参数,并调用run函数启动HTTP服务器。

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Simple HTTP server with logging')
    parser.add_argument('--port', type=int, default=8000, help='port to listen on')
    args = parser.parse_args()
    
    run(port=args.port)

在命令行中运行该Python脚本时,可以传入--port参数来指定服务器监听的端口,默认为8000。服务器启动后,可以通过浏览器访问http://localhost:8000来测试服务器的功能。

这就是一个简单的带有日志记录功能的HTTP服务器的例子。通过该例子,我们可以学习如何使用Python的http.serverlogging模块来创建和记录HTTP服务器的日志。