我有一个网络服务器,我希望能够记录该请求,响应和所花费的时间。
我遇到了这个https://docs.aiohttp.org/en/stable/logging.html,但是当我尝试使用替换日志记录AccessLogger类中的内容时。它失败并显示以下错误:
回溯(最近通话最近): 日志中的文件“ /home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py”,第233行 self.logger.info(self._log_format%元组(值),extra = extra) AttributeError:类型对象“ AccessLogger”没有属性“ info”
在处理上述异常期间,发生了另一个异常:
回溯(最近通话最近): 开始时,文件“ /home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_protocol.py” self.log_access(request,resp,loop.time()-现在) 在log_access中的第348行,文件“ /home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_protocol.py” self.access_logger.log(请求,响应,时间) 在日志中的文件“ /home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py”,第235行 self.logger.exception(“记录错误”) AttributeError:类型对象“ AccessLogger”没有属性“ exception” 错误:aiohttp.server:未处理的异常 追溯(最近一次通话): 日志中的文件“ /home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py”,第233行 self.logger.info(self._log_format%元组(值),extra = extra) AttributeError:类型对象“ AccessLogger”没有属性“ info”
在处理上述异常期间,发生了另一个异常:
回溯(最近通话最近): 开始时,文件“ /home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_protocol.py” self.log_access(request,resp,loop.time()-现在) 在log_access中的第348行,文件“ /home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_protocol.py” self.access_logger.log(请求,响应,时间) 在日志中的文件“ /home/kay/.local/share/virtualenvs/entity-extractor-BuK_iA9e/lib/python3.8/site-packages/aiohttp/web_log.py”,第235行 self.logger.exception(“记录错误”)
logger.py
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}')
server.py
from aiohttp import web
from src.api import API
from src.logger import AccessLogger
server = API()
web.run_app(server.app,access_log=AccessLogger)
我的最终目标是使日志也具有字典json格式。如果有办法可以实现这一目标,请告诉我。
答案 0 :(得分:1)
您使用了错误的属性。您必须以access_log_class
的身份通过自定义记录器。 (https://docs.aiohttp.org/en/stable/web_reference.html#aiohttp.web.run_app)
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)
access_log
必须是logging.Logger
实例