mirror of
https://github.com/jupyter/notebook.git
synced 2024-12-27 04:20:22 +08:00
e5df456949
log refer only on 4XX, and never log user agent This function was ported from nbviewer, and some of the choices were not quite right for the notebook server.
49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
#-----------------------------------------------------------------------------
|
|
# Copyright (C) 2013 The IPython Development Team
|
|
#
|
|
# Distributed under the terms of the BSD License. The full license is in
|
|
# the file COPYING, distributed as part of this software.
|
|
#-----------------------------------------------------------------------------
|
|
|
|
import json
|
|
from tornado.log import access_log
|
|
|
|
def log_request(handler):
|
|
"""log a bit more information about each request than tornado's default
|
|
|
|
- move static file get success to debug-level (reduces noise)
|
|
- get proxied IP instead of proxy IP
|
|
- log referer for redirect and failed requests
|
|
- log user-agent for failed requests
|
|
"""
|
|
status = handler.get_status()
|
|
request = handler.request
|
|
if status < 300 or status == 304:
|
|
# Successes (or 304 FOUND) are debug-level
|
|
log_method = access_log.debug
|
|
elif status < 400:
|
|
log_method = access_log.info
|
|
elif status < 500:
|
|
log_method = access_log.warning
|
|
else:
|
|
log_method = access_log.error
|
|
|
|
request_time = 1000.0 * handler.request.request_time()
|
|
ns = dict(
|
|
status=status,
|
|
method=request.method,
|
|
ip=request.remote_ip,
|
|
uri=request.uri,
|
|
request_time=request_time,
|
|
)
|
|
msg = "{status} {method} {uri} ({ip}) {request_time:.2f}ms"
|
|
if status >= 400:
|
|
# log bad referers
|
|
ns['referer'] = request.headers.get('Referer', 'None')
|
|
msg = msg + ' referer={referer}'
|
|
if status >= 500 and status != 502:
|
|
# log all headers if it caused an error
|
|
log_method(json.dumps(request.headers, indent=2))
|
|
log_method(msg.format(**ns))
|
|
|