2017-04-19 3 views
1

Ich verwende aiohttp 2 mit Python 3.6 und möchte die Anfragen an die Anwendung zu protokollieren.Protokollanforderungsformat in aiohttp 2 angeben

ich getan habe:

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

und jetzt, wenn die Anwendung läuft ich ein Protokoll in diesem Format erhalten:

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" 

die message Komponente hat einen redundanten Zeitstempel, und ich möchte Passen Sie das Format an. Die documentation sagt, es sollte möglich sein, aber ich verstehe nicht, wie man es tatsächlich funktioniert und es gibt keine Codebeispiele.

fand ich nur this usage aber mit:

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

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

die Anwendung überhaupt kein Protokoll erzeugt. Ich verstehe nicht, was make_handler genau tut, und eine previous question hilft nicht.

Wie kann ich den message Teil des Protokolls formatieren und die Elemente einfügen, die in der aiohttp docs aufgelistet sind?

+0

Haben Sie 'aiohttp.web.Application.make_handler()' aufgerufen? –

+0

Nein, in diesem Beispiel rufen sie es in der App-Instanz auf. Ich habe es trotzdem versucht und es sagt 'make_handler() fehlt 1 benötigtes Positionsargument: 'self', also scheint es, dass es eine Instanzmethode ist – Jacopofar

Antwort

1

Sie können meine Probe sehen:

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

laufen sie und Zugang 'http://127.0.0.1:8080/xmwd', Sie GET /xmwd HTTP/1.1 200 11 in der Konsole sehen.