mirror of https://github.com/zulip/zulip.git
errors: Show what logger and source code the message comes from.
This commit is contained in:
parent
77e47900dd
commit
eea1ceb0db
|
@ -22,6 +22,10 @@ def format_subject(subject: str) -> str:
|
|||
"""
|
||||
return subject.replace('\n', '\\n').replace('\r', '\\r')
|
||||
|
||||
def logger_repr(report: Dict[str, Any]) -> str:
|
||||
return ("Logger %(logger_name)s, from module %(log_module)s line %(log_lineno)d:"
|
||||
% report)
|
||||
|
||||
def user_info_str(report: Dict[str, Any]) -> str:
|
||||
if report['user_full_name'] and report['user_email']:
|
||||
user_info = "%(user_full_name)s (%(user_email)s)" % (report)
|
||||
|
@ -107,6 +111,7 @@ def notify_server_error(report: Dict[str, Any]) -> None:
|
|||
def zulip_server_error(report: Dict[str, Any]) -> None:
|
||||
subject = '%(node)s: %(message)s' % (report)
|
||||
|
||||
logger_str = logger_repr(report)
|
||||
user_info = user_info_str(report)
|
||||
deployment = deployment_repr()
|
||||
|
||||
|
@ -121,8 +126,8 @@ def zulip_server_error(report: Dict[str, Any]) -> None:
|
|||
else:
|
||||
request_repr = "Request info: none"
|
||||
|
||||
message = ("Error generated by %s\n\n~~~~ pytb\n%s\n\n~~~~\n%s\n%s"
|
||||
% (user_info, report['stack_trace'], deployment, request_repr))
|
||||
message = ("%s\nError generated by %s\n\n~~~~ pytb\n%s\n\n~~~~\n%s\n%s"
|
||||
% (logger_str, user_info, report['stack_trace'], deployment, request_repr))
|
||||
|
||||
realm = get_system_bot(settings.ERROR_BOT).realm
|
||||
internal_send_message(realm, settings.ERROR_BOT, "stream", "errors",
|
||||
|
@ -131,6 +136,7 @@ def zulip_server_error(report: Dict[str, Any]) -> None:
|
|||
def email_server_error(report: Dict[str, Any]) -> None:
|
||||
subject = '%(node)s: %(message)s' % (report)
|
||||
|
||||
logger_str = logger_repr(report)
|
||||
user_info = user_info_str(report)
|
||||
deployment = deployment_repr()
|
||||
|
||||
|
@ -144,8 +150,8 @@ def email_server_error(report: Dict[str, Any]) -> None:
|
|||
else:
|
||||
request_repr = "Request info: none\n"
|
||||
|
||||
message = ("Error generated by %s\n\n%s\n\n%s\n\n%s"
|
||||
% (user_info, report['stack_trace'], deployment, request_repr))
|
||||
message = ("%s\nError generated by %s\n\n%s\n\n%s\n\n%s"
|
||||
% (logger_str, user_info, report['stack_trace'], deployment, request_repr))
|
||||
|
||||
mail_admins(format_subject(subject), message, fail_silently=True)
|
||||
|
||||
|
|
|
@ -119,7 +119,11 @@ def skip_site_packages_logs(record: logging.LogRecord) -> bool:
|
|||
return True
|
||||
|
||||
def find_log_caller_module(record: logging.LogRecord) -> Optional[str]:
|
||||
'''Find the module name corresponding to where this record was logged.'''
|
||||
'''Find the module name corresponding to where this record was logged.
|
||||
|
||||
Sadly `record.module` is just the innermost component of the full
|
||||
module name, so we have to go reconstruct this ourselves.
|
||||
'''
|
||||
# Repeat a search similar to that in logging.Logger.findCaller.
|
||||
# The logging call should still be on the stack somewhere; search until
|
||||
# we find something in the same source file, and that should give the
|
||||
|
|
|
@ -11,6 +11,7 @@ from django.http import HttpRequest
|
|||
from django.utils.log import AdminEmailHandler
|
||||
from django.views.debug import ExceptionReporter, get_exception_reporter_filter
|
||||
|
||||
from zerver.lib.logging_util import find_log_caller_module
|
||||
from zerver.lib.queue import queue_json_publish
|
||||
|
||||
def add_request_metadata(report: Dict[str, Any], request: HttpRequest) -> None:
|
||||
|
@ -85,6 +86,10 @@ class AdminNotifyHandler(logging.Handler):
|
|||
report['stack_trace'] = stack_trace
|
||||
report['message'] = message
|
||||
|
||||
report['logger_name'] = record.name
|
||||
report['log_module'] = find_log_caller_module(record)
|
||||
report['log_lineno'] = record.lineno
|
||||
|
||||
if hasattr(record, "request"):
|
||||
add_request_metadata(report, record.request) # type: ignore # record.request is added dynamically
|
||||
|
||||
|
|
Loading…
Reference in New Issue