Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for JSON formatted logs #5799

Merged
merged 13 commits into from
Oct 14, 2020
5 changes: 4 additions & 1 deletion notebook/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ def log_request(handler, log=access_log, log_json=False):
msg = msg + ' referer={referer}'
if status >= 500 and status != 502:
# log all headers if it caused an error
log_method(json.dumps(dict(request.headers), indent=2))
if log_json:
log_method("", extra=dict(props=dict(request.headers)))
else:
log_method(json.dumps(dict(request.headers), indent=2))
if log_json:
log_method("", extra=dict(props=ns))
else:
Expand Down
14 changes: 3 additions & 11 deletions notebook/notebookapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -730,15 +730,14 @@ def _validate_log_json(self, proposal):
if value:
try:
import json_logging
self.log.info('initializing json logging')
mriedem marked this conversation as resolved.
Show resolved Hide resolved
json_logging.init_non_web(enable_json=True)
self._log_formatter_cls = json_logging.JSONLogFormatter
# Note that we don't need to trigger _log_format_changed here
# because init_logging will set the JSONLogFormatter on all
# of the registered loggers.
except ImportError:
# If configured for json logs and we can't do it, log a hint.
# Only log the error once though.
if not self._json_logging_import_error_logged:
logging.getLogger(__name__).exception(
logging.getLogger(__name__).warning(
'Unable to use json logging due to missing packages. '
'Run "pip install notebook[json-logging]" to fix.'
)
Expand Down Expand Up @@ -1632,13 +1631,6 @@ def init_configurables(self):
)

def init_logging(self):
if self.log_json:
self.log.debug('initializing json logging')
# Note that we don't guard against ImportError here because if the
# package is missing then _validate_log_json should have set
# log_json=False.
import json_logging
json_logging.init_non_web(enable_json=True)
# This prevents double log messages because tornado use a root logger that
# self.log is a child of. The logging module dispatches log messages to a log
# and all of its ancenstors until propagate is set to False.
Expand Down