Python 如何使用aiohttp web服务器设置日志记录

Python 如何使用aiohttp web服务器设置日志记录,python,python-3.x,aiohttp,Python,Python 3.x,Aiohttp,我有一个Web服务器,我希望能够记录请求、响应和花费的时间 我遇到了这个问题,但是当我尝试使用drop-in替换日志记录AccessLogger类时。它失败,出现以下错误: 回溯最近一次呼叫上次: 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py,第233行,在日志中 self.logger.infoself.\u log\u格

我有一个Web服务器,我希望能够记录请求、响应和花费的时间

我遇到了这个问题,但是当我尝试使用drop-in替换日志记录AccessLogger类时。它失败,出现以下错误:

回溯最近一次呼叫上次: 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py,第233行,在日志中 self.logger.infoself.\u log\u格式%tuplevalues,extra=extra AttributeError:类型对象“AccessLogger”没有属性“info”

在处理上述异常期间,发生了另一个异常:

回溯最近一次呼叫上次: 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_protocol.py,第472行,开始 self.log\u accessrequest,resp,loop.time-立即 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_protocol.py,第348行,登录访问 self.access\u logger.log请求、响应、时间 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py,日志第235行 self.logger.exceptionError在日志记录中 AttributeError:类型对象“AccessLogger”没有属性“exception” 错误:aiohttp。服务器:未处理的异常 回溯最近一次呼叫上次: 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py,第233行,在日志中 self.logger.infoself.\u log\u格式%tuplevalues,extra=extra AttributeError:类型对象“AccessLogger”没有属性“info”

在处理上述异常期间,发生了另一个异常:

回溯最近一次呼叫上次: 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_protocol.py,第472行,开始 self.log\u accessrequest,resp,loop.time-立即 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_protocol.py,第348行,登录访问 self.access\u logger.log请求、响应、时间 文件/home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py,日志第235行 self.logger.exceptionError在日志记录中

logger.py

server.py


我的最终目标是让日志采用字典json格式。如果我有办法做到这一点,请告诉我。

您使用了错误的属性。您必须将自定义记录器作为access\u log\u类传递


access_log必须是一个logging.Logger实例

谢谢,知道为什么在使用gunicorn时logging不起作用吗?@Kay MB因为您需要自定义logging conf,请检查python文档来创建它。此外,您必须向gunicornI安装程序gunicorn提供logger并将其用于日志记录,但您知道如何获取json日志吗?@Kay这不是一项简单的任务,因为您需要实现自定义日志记录格式,因为我停止使用gunicorn进行日志记录,而是使用aiohttp中的中间件创建json日志。
from aiohttp.abc import AbstractAccessLogger
class AccessLogger(AbstractAccessLogger):

    def log(self, request, response, time):
        self.logger.info(f'{request.remote} '
                         f'"{request.method} {request.path} '
                         f'done in {time}s: {response.status}')
from aiohttp import web
from src.api import API
from src.logger import AccessLogger

server = API()
web.run_app(server.app,access_log=AccessLogger)
from aiohttp import web
from src.api import API
from src.logger import AccessLogger

server = API()
web.run_app(server.app, access_log_class=AccessLogger)