在aiohttp中指定日志请求格式2
问题描述:
我在Python 3.6中使用aiohttp 2并希望记录到达应用程序的请求。在aiohttp中指定日志请求格式2
我所做的:
# use ISO timestamps
from time import gmtime
logging.Formatter.converter = gmtime
# create a formatter
ch = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s %(levelname)s %(name)s - %(message)s', '%Y-%m-%dT%H:%M:%S')
ch.setFormatter(formatter)
# show all emssages (default is WARNING)
logging.getLogger('aiohttp.access').setLevel(logging.DEBUG)
# attach the handler
logging.getLogger('aiohttp.access').addHandler(ch)
,现在当应用程序运行时,我得到一个日志的格式如下:
2017-04-19T16:02:17 INFO aiohttp.access - 127.0.0.1 - - [19/Apr/2017:16:02:17 +0000] "GET /test HTTP/1.1" 404 547 "-" "curl/7.51.0"
的message
组件具有冗余的时间戳,我想自定义其格式。 documentation说它应该是可能的,但我不明白如何使它实际工作,并没有代码示例。
我发现只有this usage但:
mylogger = logging.Logger('aiohttp.access')
mylogger.setLevel(logging.DEBUG)
mylogger.addHandler(ch)
handler = app.make_handler(
logger=mylogger,
access_log_format='%r %s %b',
)
应用不产生日志可言。我不明白make_handler
究竟做了什么,而previous question没有帮助。
如何格式化message
部分日志并插入aiohttp文档中列出的元素?
答
你可以看到我的样本:
import asyncio
import logging
from aiohttp import web
mylogger = logging.getLogger('aiohttp.access')
mylogger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
mylogger.addHandler(ch)
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
loop = asyncio.get_event_loop()
app = web.Application(loop=loop)
app.router.add_get('/', handle)
app.router.add_get('/{name}', handle)
loop.run_until_complete(
loop.create_server(
app.make_handler(access_log=mylogger,
access_log_format='%r %s %b'), '0.0.0.0', 8080))
loop.run_forever()
loop.close()
运行它,并获得 'http://127.0.0.1:8080/xmwd',您会在控制台中看到GET /xmwd HTTP/1.1 200 11
。
你叫'aiohttp.web.Application.make_handler()'? – 2017-04-19 16:18:44
不,在这个例子中,他们在应用程序实例上调用它。我试过了,它说'make_handler()缺少1个需要的位置参数:'self''所以它看起来是一个实例方法 – Jacopofar