Python中的HTTP服务器日志记录技术
在Python中,可以使用内置的http.server模块来创建一个简单的HTTP服务器。该模块中提供了两个类HTTPServer和BaseHTTPRequestHandler,可以方便地创建和处理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.server和logging模块来创建和记录HTTP服务器的日志。
