Python 在aiohttp 2中指定日志请求格式

Python 在aiohttp 2中指定日志请求格式,python,python-3.x,logging,aiohttp,Python,Python 3.x,Logging,Aiohttp,我将aiohttp 2与Python3.6一起使用,并希望记录到应用程序的请求 我做到了: # 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 - %(me

我将aiohttp 2与Python3.6一起使用,并希望记录到应用程序的请求

我做到了:

# 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" 
消息
组件有一个冗余的时间戳,我想定制它的格式。他说这应该是可能的,但我不明白如何使它真正工作,也没有代码示例

我只发现了,但有:

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的确切功能是什么,a也帮不了什么忙

如何格式化日志中的
消息
部分并插入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()

运行它并访问“”,您将在控制台中看到
GET/xmwd HTTP/1.1 200 11

您是否调用了
aiohttp.web.Application.make_handler()
?否,在该示例中,他们在应用程序实例上调用它。尽管如此,我还是尝试了,它说
make_handler()缺少一个必需的位置参数:“self”
,所以它似乎是一个实例方法