File tree 4 files changed +45
-13
lines changed
4 files changed +45
-13
lines changed Original file line number Diff line number Diff line change @@ -43,3 +43,10 @@ def _celery_integration(*a, **kw):
43
43
from .celery import install
44
44
45
45
return install (* a , ** kw )
46
+
47
+
48
+ @register_integration ('logging' )
49
+ def _logging_integration (* a , ** kw ):
50
+ from .logging import install
51
+
52
+ return install (* a , ** kw )
Original file line number Diff line number Diff line change 3
3
4
4
import sys
5
5
import logging
6
+ from threading import Lock
6
7
7
8
from sentry_sdk import get_current_hub , capture_event , add_breadcrumb
8
9
from sentry_sdk .utils import to_string , Event , skip_internal_frames
9
10
10
11
12
+ _installer_lock = Lock ()
13
+ _installed = False
14
+ _master_handler = None
15
+
16
+ def install (client ):
17
+ global _installed
18
+ global _master_handler
19
+ with _installer_lock :
20
+ if _installed :
21
+ return
22
+
23
+ _master_handler = SentryHandler ()
24
+ _master_handler .setLevel (logging .INFO ) # TODO: make configurable
25
+
26
+ old_callhandlers = logging .Logger .callHandlers
27
+
28
+ def sentry_patched_callhandlers (self , record ):
29
+ _master_handler .handle (record )
30
+ return old_callhandlers (self , record )
31
+
32
+ logging .Logger .callHandlers = sentry_patched_callhandlers
33
+
34
+ _installed = True
35
+
36
+
11
37
class SentryHandler (logging .Handler , object ):
12
38
def emit (self , record ):
13
39
try :
Original file line number Diff line number Diff line change 14
14
from sentry_sdk .integrations .logging import SentryHandler
15
15
import sentry_sdk .integrations .flask as flask_sentry
16
16
17
- get_current_hub ().bind_client (Client (integrations = ["flask" ]))
17
+ get_current_hub ().bind_client (Client (integrations = ["flask" , "logging" ]))
18
18
login_manager = LoginManager ()
19
19
20
20
@@ -23,11 +23,6 @@ def app():
23
23
app = Flask (__name__ )
24
24
app .config ["TESTING" ] = True
25
25
app .secret_key = "haha"
26
- app .logger .setLevel (logging .DEBUG )
27
- handler = SentryHandler ()
28
- handler .setLevel (logging .DEBUG )
29
- app .logger .handlers = []
30
- app .logger .addHandler (handler )
31
26
32
27
login_manager .init_app (app )
33
28
@@ -273,6 +268,8 @@ def index():
273
268
274
269
275
270
def test_logging (capture_events , app ):
271
+ # ensure that Flask's logger magic doesn't break ours
272
+
276
273
@app .route ("/" )
277
274
def index ():
278
275
app .logger .error ("hi" )
Original file line number Diff line number Diff line change
1
+ import pytest
1
2
import logging
2
3
3
4
import sentry_sdk
4
- from sentry_sdk .integrations .logging import SentryHandler
5
5
6
- logger = logging .getLogger (__name__ )
6
+ other_logger = logging .getLogger ("testfoo" )
7
+ other_logger .setLevel (logging .DEBUG )
7
8
8
- logger .handlers = [SentryHandler ()]
9
- logger .setLevel (logging .DEBUG )
9
+ sentry_sdk .get_current_hub ().bind_client (sentry_sdk .Client (integrations = ['logging' ]))
10
10
11
- sentry_sdk .get_current_hub ().bind_client (sentry_sdk .Client ())
11
+ logger = logging .getLogger (__name__ )
12
+ logger .setLevel (logging .DEBUG )
12
13
13
14
14
- def test_logging (capture_events ):
15
+ @pytest .mark .parametrize ("logger" , [logger , other_logger ])
16
+ def test_logging (capture_events , logger ):
15
17
logger .info ("bread" )
16
18
logger .critical ("LOL" )
17
19
event , = capture_events
18
20
assert event ["level" ] == "fatal"
19
21
assert not event ["logentry" ]["params" ]
20
22
assert event ["logentry" ]["message" ] == "LOL"
21
- assert event [ "breadcrumbs" ][ 0 ][ " message" ] == "bread"
23
+ assert any ( crumb [ " message" ] == "bread" for crumb in event [ 'breadcrumbs' ])
You can’t perform that action at this time.
0 commit comments