6
6
import json_logging .framework
7
7
from json_logging import JSONLogWebFormatter
8
8
from json_logging .framework_base import AppRequestInstrumentationConfigurator , RequestAdapter , ResponseAdapter
9
+ from json_logging .util import is_not_match_any_pattern
9
10
10
11
11
12
def is_quart_present ():
@@ -26,38 +27,39 @@ def is_quart_present():
26
27
27
28
28
29
class QuartAppRequestInstrumentationConfigurator (AppRequestInstrumentationConfigurator ):
29
- def config (self , app ):
30
+ def config (self , app , exclude_url_patterns = [] ):
30
31
if not is_quart_present ():
31
32
raise RuntimeError ("quart is not available in system runtime" )
32
33
from quart .app import Quart
33
34
if not isinstance (app , Quart ):
34
35
raise RuntimeError ("app is not a valid quart.app.Quart app instance" )
35
36
36
37
# Remove quart logging handlers
37
- from quart .logging import default_handler , serving_handler
38
+ from quart .logging import default_handler
38
39
logging .getLogger ('quart.app' ).removeHandler (default_handler )
39
- logging .getLogger ('quart.serving' ).removeHandler (serving_handler )
40
-
41
40
json_logging .util .update_formatter_for_loggers ([
42
- # logging.getLogger('quart.app'),
43
- # logging.getLogger('quart.serving'),
41
+ logging .getLogger ('quart.app' ),
44
42
], JSONLogWebFormatter )
45
43
44
+ logging .getLogger ('quart.serving' ).disabled = True
45
+
46
46
# noinspection PyAttributeOutsideInit
47
- self .request_logger = logging .getLogger ('quart.app ' )
47
+ self .request_logger = logging .getLogger ('quart-request-logger ' )
48
48
49
49
from quart import g
50
50
51
51
@app .before_request
52
52
def before_request ():
53
- g .request_info = json_logging .RequestInfo (_current_request )
53
+ if is_not_match_any_pattern (_current_request .path , exclude_url_patterns ):
54
+ g .request_info = json_logging .RequestInfo (_current_request )
54
55
55
56
@app .after_request
56
57
def after_request (response ):
57
- request_info = g .request_info
58
- request_info .update_response_status (response )
59
- # TODO:handle to print out request instrumentation in non-JSON mode
60
- self .request_logger .info ("" , extra = {'request_info' : request_info })
58
+ if hasattr (g , 'request_info' ):
59
+ request_info = g .request_info
60
+ request_info .update_response_status (response )
61
+ # TODO:handle to print out request instrumentation in non-JSON mode
62
+ self .request_logger .info ("" , extra = {'request_info' : request_info })
61
63
return response
62
64
63
65
0 commit comments