2017-04-19 1 views
1

J'utilise aiohttp 2 avec Python 3.6 et je veux enregistrer les demandes arrivant à l'application.spécifiez le format de demande de journal dans aiohttp 2

Je l'ai fait:

# 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) 

et maintenant lorsque l'application est en cours d'exécution, je reçois un journal dans ce format:

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" 

le composant message a un horodatage redondant, et je voudrais personnaliser son format. Le documentation dit que cela devrait être possible, mais je ne comprends pas comment le faire fonctionner et il n'y a pas d'exemples de code.

Je trouve que this usage mais avec:

mylogger = logging.Logger('aiohttp.access') 
mylogger.setLevel(logging.DEBUG) 
mylogger.addHandler(ch) 

handler = app.make_handler(
     logger=mylogger, 
     access_log_format='%r %s %b', 
) 

l'application ne produit aucun journal du tout. Je ne comprends pas ce que fait make_handler exactement, et un previous question n'aide pas.

Comment puis-je formater la partie message du journal et insérer les éléments répertoriés dans les docs aiohttp?

+0

Avez-vous appelé 'aiohttp.web.Application.make_handler()'? –

+0

Non, dans cet exemple, ils l'appellent sur l'instance de l'application. J'ai essayé néanmoins et il dit 'make_handler() manquant 1 argument de position requis: 'self' donc il semble que c'est une méthode d'instance – Jacopofar

Répondre

1

Vous pouvez voir mon exemple:

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() 

terme et l'accès 'http://127.0.0.1:8080/xmwd', vous verrez GET /xmwd HTTP/1.1 200 11 dans votre console.