Skip to content

Commit

Permalink
Use logging levelno instead of levelname. Levelnames can be overridden
Browse files Browse the repository at this point in the history
  • Loading branch information
rrauenza committed May 25, 2022
1 parent 23e0295 commit c9562b2
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 5 deletions.
20 changes: 15 additions & 5 deletions sentry_sdk/integrations/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,17 +110,27 @@ def _breadcrumb_from_record(record):
# type: (LogRecord) -> Dict[str, Any]
return {
"type": "log",
"level": _logging_to_event_level(record.levelname),
"level": _logging_to_event_level(record),
"category": record.name,
"message": record.message,
"timestamp": datetime.datetime.utcfromtimestamp(record.created),
"data": _extra_from_record(record),
}


def _logging_to_event_level(levelname):
# type: (str) -> str
return {"critical": "fatal"}.get(levelname.lower(), levelname.lower())
def _logging_to_event_level(record):
# type: (LogRecord) -> str
default = 'error'
return {
logging.NOTSET: 'notset',
logging.DEBUG: 'debug',
logging.INFO: 'info',
logging.WARN: 'warning', # WARN is same a WARNING
logging.WARNING: 'warning',
logging.ERROR: 'error',
logging.FATAL: 'fatal',
logging.CRITICAL: 'fatal', # CRITICAL is same as FATAL
}.get(record.levelno, default)


COMMON_RECORD_ATTRS = frozenset(
Expand Down Expand Up @@ -220,7 +230,7 @@ def _emit(self, record):

hint["log_record"] = record

event["level"] = _logging_to_event_level(record.levelname)
event["level"] = _logging_to_event_level(record)
event["logger"] = record.name

# Log records from `warnings` module as separate issues
Expand Down
29 changes: 29 additions & 0 deletions tests/integrations/logging/test_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,35 @@ def test_logging_level(sentry_init, capture_events):
assert not events


def test_all_logging_levels(sentry_init, capture_events):

levels = {
# logging.NOTSET: 'notset',
logging.DEBUG: 'debug',
logging.INFO: 'info',
logging.WARN: 'warning',
logging.WARNING: 'warning',
logging.ERROR: 'error',
logging.CRITICAL: 'fatal',
logging.FATAL: 'fatal',
}

for logging_level, sentry_level in levels.items():

logger.setLevel(logging_level)
sentry_init(integrations=[LoggingIntegration(event_level=logging_level)],
default_integrations=False)
events = capture_events()

logger.log(logging_level, "Trying level %s", logging_level)
assert events
assert events[0]['level'] == sentry_level
assert events[0]['logentry']['message'] == "Trying level %s"
assert events[0]['logentry']['params'] == [logging_level]

del events[:]


def test_logging_filters(sentry_init, capture_events):
sentry_init(integrations=[LoggingIntegration()], default_integrations=False)
events = capture_events()
Expand Down

0 comments on commit c9562b2

Please sign in to comment.