@@ -107,75 +107,61 @@ def sentry_patched_callhandlers(self, record):
107107 logging .Logger .callHandlers = sentry_patched_callhandlers # type: ignore
108108
109109
110- def _can_record (record ):
111- # type: (LogRecord) -> bool
112- """Prevents ignored loggers from recording"""
113- for logger in _IGNORED_LOGGERS :
114- if fnmatch (record .name , logger ):
115- return False
116- return True
117-
118-
119- def _breadcrumb_from_record (record ):
120- # type: (LogRecord) -> Dict[str, Any]
121- return {
122- "type" : "log" ,
123- "level" : _logging_to_event_level (record ),
124- "category" : record .name ,
125- "message" : record .message ,
126- "timestamp" : datetime .datetime .utcfromtimestamp (record .created ),
127- "data" : _extra_from_record (record ),
128- }
129-
130-
131- def _logging_to_event_level (record ):
132- # type: (LogRecord) -> str
133- return LOGGING_TO_EVENT_LEVEL .get (
134- record .levelno , record .levelname .lower () if record .levelname else ""
110+ class _BaseHandler (logging .Handler , object ):
111+ COMMON_RECORD_ATTRS = frozenset (
112+ (
113+ "args" ,
114+ "created" ,
115+ "exc_info" ,
116+ "exc_text" ,
117+ "filename" ,
118+ "funcName" ,
119+ "levelname" ,
120+ "levelno" ,
121+ "linenno" ,
122+ "lineno" ,
123+ "message" ,
124+ "module" ,
125+ "msecs" ,
126+ "msg" ,
127+ "name" ,
128+ "pathname" ,
129+ "process" ,
130+ "processName" ,
131+ "relativeCreated" ,
132+ "stack" ,
133+ "tags" ,
134+ "thread" ,
135+ "threadName" ,
136+ "stack_info" ,
137+ )
135138 )
136139
140+ def _can_record (self , record ):
141+ # type: (LogRecord) -> bool
142+ """Prevents ignored loggers from recording"""
143+ for logger in _IGNORED_LOGGERS :
144+ if fnmatch (record .name , logger ):
145+ return False
146+ return True
147+
148+ def _logging_to_event_level (self , record ):
149+ # type: (LogRecord) -> str
150+ return LOGGING_TO_EVENT_LEVEL .get (
151+ record .levelno , record .levelname .lower () if record .levelname else ""
152+ )
137153
138- COMMON_RECORD_ATTRS = frozenset (
139- (
140- "args" ,
141- "created" ,
142- "exc_info" ,
143- "exc_text" ,
144- "filename" ,
145- "funcName" ,
146- "levelname" ,
147- "levelno" ,
148- "linenno" ,
149- "lineno" ,
150- "message" ,
151- "module" ,
152- "msecs" ,
153- "msg" ,
154- "name" ,
155- "pathname" ,
156- "process" ,
157- "processName" ,
158- "relativeCreated" ,
159- "stack" ,
160- "tags" ,
161- "thread" ,
162- "threadName" ,
163- "stack_info" ,
164- )
165- )
166-
167-
168- def _extra_from_record (record ):
169- # type: (LogRecord) -> Dict[str, None]
170- return {
171- k : v
172- for k , v in iteritems (vars (record ))
173- if k not in COMMON_RECORD_ATTRS
174- and (not isinstance (k , str ) or not k .startswith ("_" ))
175- }
154+ def _extra_from_record (self , record ):
155+ # type: (LogRecord) -> Dict[str, None]
156+ return {
157+ k : v
158+ for k , v in iteritems (vars (record ))
159+ if k not in self .COMMON_RECORD_ATTRS
160+ and (not isinstance (k , str ) or not k .startswith ("_" ))
161+ }
176162
177163
178- class EventHandler (logging . Handler , object ):
164+ class EventHandler (_BaseHandler ):
179165 """
180166 A logging handler that emits Sentry events for each log record
181167
@@ -190,7 +176,7 @@ def emit(self, record):
190176
191177 def _emit (self , record ):
192178 # type: (LogRecord) -> None
193- if not _can_record (record ):
179+ if not self . _can_record (record ):
194180 return
195181
196182 hub = Hub .current
@@ -232,7 +218,7 @@ def _emit(self, record):
232218
233219 hint ["log_record" ] = record
234220
235- event ["level" ] = _logging_to_event_level (record )
221+ event ["level" ] = self . _logging_to_event_level (record )
236222 event ["logger" ] = record .name
237223
238224 # Log records from `warnings` module as separate issues
@@ -255,7 +241,7 @@ def _emit(self, record):
255241 "params" : record .args ,
256242 }
257243
258- event ["extra" ] = _extra_from_record (record )
244+ event ["extra" ] = self . _extra_from_record (record )
259245
260246 hub .capture_event (event , hint = hint )
261247
@@ -264,7 +250,7 @@ def _emit(self, record):
264250SentryHandler = EventHandler
265251
266252
267- class BreadcrumbHandler (logging . Handler , object ):
253+ class BreadcrumbHandler (_BaseHandler ):
268254 """
269255 A logging handler that records breadcrumbs for each log record.
270256
@@ -279,9 +265,20 @@ def emit(self, record):
279265
280266 def _emit (self , record ):
281267 # type: (LogRecord) -> None
282- if not _can_record (record ):
268+ if not self . _can_record (record ):
283269 return
284270
285271 Hub .current .add_breadcrumb (
286- _breadcrumb_from_record (record ), hint = {"log_record" : record }
272+ self . _breadcrumb_from_record (record ), hint = {"log_record" : record }
287273 )
274+
275+ def _breadcrumb_from_record (self , record ):
276+ # type: (LogRecord) -> Dict[str, Any]
277+ return {
278+ "type" : "log" ,
279+ "level" : self ._logging_to_event_level (record ),
280+ "category" : record .name ,
281+ "message" : record .message ,
282+ "timestamp" : datetime .datetime .utcfromtimestamp (record .created ),
283+ "data" : self ._extra_from_record (record ),
284+ }
0 commit comments