4949app .add_middleware (SentryAsgiMiddleware )
5050
5151
52+ def format_log_fields (request , request_time , status_code ):
53+ current_time = time .time ()
54+ fields = {
55+ "agent" : request .headers .get ("User-Agent" ),
56+ "path" : request .url .path ,
57+ "method" : request .method ,
58+ "lang" : request .headers .get ("Accept-Language" ),
59+ "querystring" : dict (request .query_params ),
60+ "errno" : 0 ,
61+ "t" : int ((current_time - request_time ) * 1000.0 ),
62+ "time" : datetime .fromtimestamp (current_time ).isoformat (),
63+ "status_code" : status_code ,
64+ }
65+ return fields
66+
67+
68+ @app .middleware ("http" )
69+ async def request_summary (request : Request , call_next ):
70+ """Middleware to log request info"""
71+ summary_logger = logging .getLogger ("request.summary" )
72+ request_time = time .time ()
73+ try :
74+ response = await call_next (request )
75+ log_fields = format_log_fields (
76+ request , request_time , status_code = response .status_code
77+ )
78+ summary_logger .info ("" , extra = log_fields )
79+ return response
80+ except Exception as exc :
81+ log_fields = format_log_fields (request , request_time , status_code = 500 )
82+ summary_logger .info (exc , extra = log_fields )
83+ raise
84+
85+
5286@app .get ("/" , include_in_schema = False )
5387def root ():
5488 """Expose key configuration"""
@@ -64,33 +98,6 @@ def root():
6498 }
6599
66100
67- @app .middleware ("http" )
68- async def request_summary (request : Request , call_next ):
69- """Middleware to log request info"""
70- summary_logger = logging .getLogger ("request.summary" )
71- previous_time = time .time ()
72-
73- infos = {
74- "agent" : request .headers .get ("User-Agent" ),
75- "path" : request .url .path ,
76- "method" : request .method ,
77- "lang" : request .headers .get ("Accept-Language" ),
78- "querystring" : dict (request .query_params ),
79- "errno" : 0 ,
80- }
81-
82- response = await call_next (request )
83-
84- current = time .time ()
85- duration = int ((current - previous_time ) * 1000.0 )
86- isotimestamp = datetime .fromtimestamp (current ).isoformat ()
87- infos = {"time" : isotimestamp , "code" : response .status_code , "t" : duration , ** infos }
88-
89- summary_logger .info ("" , extra = infos )
90-
91- return response
92-
93-
94101@app .post ("/bugzilla_webhook" )
95102def bugzilla_webhook (
96103 request : BugzillaWebhookRequest = Body (..., embed = False ),
0 commit comments