Skip to content

Commit 1c5ad96

Browse files
authored
Merge pull request #274 from Zsailer/log-from-handler-log
Enable JupyterHandlers to set the logger on log_request
2 parents 51b0287 + c2b615c commit 1c5ad96

File tree

4 files changed

+34
-9
lines changed

4 files changed

+34
-9
lines changed

jupyter_server/extension/application.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import sys
22
import re
3+
import logging
34

45
from jinja2 import Environment, FileSystemLoader
56

@@ -12,6 +13,7 @@
1213
validate
1314
)
1415
from traitlets.config import Config
16+
from tornado.log import LogFormatter
1517

1618
from jupyter_core.application import JupyterApp
1719

@@ -176,6 +178,17 @@ def get_extension_point(cls):
176178
# A ServerApp is not defined yet, but will be initialized below.
177179
serverapp = None
178180

181+
_log_formatter_cls = LogFormatter
182+
183+
@default('log_level')
184+
def _default_log_level(self):
185+
return logging.INFO
186+
187+
@default('log_format')
188+
def _default_log_format(self):
189+
"""override default log format to include date & time"""
190+
return u"%(color)s[%(levelname)1.1s %(asctime)s.%(msecs).03d %(name)s]%(end_color)s %(message)s"
191+
179192
@property
180193
def static_url_prefix(self):
181194
return "/static/{name}/".format(
@@ -237,7 +250,7 @@ def _prepare_settings(self):
237250
# Add static and template paths to settings.
238251
self.settings.update({
239252
"{}_static_paths".format(self.name): self.static_paths,
240-
"{}".format(self.name): self
253+
"{}".format(self.name): self,
241254
})
242255

243256
# Get setting defined by subclass using initialize_settings method.

jupyter_server/extension/handler.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from jupyter_server.base.handlers import FileFindHandler
2-
from traitlets import Unicode, default
32

43

54
class ExtensionHandlerJinjaMixin:
@@ -34,6 +33,14 @@ def serverapp(self):
3433
key = "serverapp"
3534
return self.settings[key]
3635

36+
@property
37+
def log(self):
38+
# Attempt to pull the ExtensionApp's log, otherwise fall back to ServerApp.
39+
try:
40+
return self.extensionapp.log
41+
except AttributeError:
42+
return self.serverapp.log
43+
3744
@property
3845
def config(self):
3946
return self.settings["{}_config".format(self.name)]

jupyter_server/log.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,29 @@
1212

1313
def log_request(handler):
1414
"""log a bit more information about each request than tornado's default
15-
15+
1616
- move static file get success to debug-level (reduces noise)
1717
- get proxied IP instead of proxy IP
1818
- log referer for redirect and failed requests
1919
- log user-agent for failed requests
2020
"""
2121
status = handler.get_status()
2222
request = handler.request
23+
try:
24+
logger = handler.log
25+
except AttributeError:
26+
logger = access_log
27+
2328
if status < 300 or status == 304:
2429
# Successes (or 304 FOUND) are debug-level
25-
log_method = access_log.debug
30+
log_method = logger.debug
2631
elif status < 400:
27-
log_method = access_log.info
32+
log_method = logger.info
2833
elif status < 500:
29-
log_method = access_log.warning
34+
log_method = logger.warning
3035
else:
31-
log_method = access_log.error
32-
36+
log_method = logger.error
37+
3338
request_time = 1000.0 * handler.request.request_time()
3439
ns = dict(
3540
status=status,

jupyter_server/serverapp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ def init_settings(self, jupyter_app, kernel_manager, contents_manager,
273273
server_root_dir=root_dir,
274274
jinja2_env=env,
275275
terminals_available=False, # Set later if terminals are available
276-
serverapp=self
276+
serverapp=jupyter_app
277277
)
278278

279279
# allow custom overrides for the tornado web app.

0 commit comments

Comments
 (0)