You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/jupyterlab/debuglog.py

70 lines
2.2 KiB

# coding: utf-8
"""A mixin for adding a debug log file.
"""
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
import contextlib
import logging
import os
import sys
import tempfile
import traceback
from traitlets import Unicode, default
from traitlets.config import Configurable
class DebugLogFileMixin(Configurable):
debug_log_path = Unicode('', config=True, help='Path to use for the debug log file')
@contextlib.contextmanager
def debug_logging(self):
log_path = self.debug_log_path
if os.path.isdir(log_path):
log_path = os.path.join(log_path, 'jupyterlab-debug.log')
if not log_path:
handle, log_path = tempfile.mkstemp(prefix='jupyterlab-debug-', suffix='.log')
os.close(handle)
log = self.log
# Transfer current log level to the handlers:
for h in log.handlers:
h.setLevel(self.log_level)
log.setLevel('DEBUG')
# Create our debug-level file handler:
_debug_handler = logging.FileHandler(
log_path, 'w', 'utf8', delay=True)
_log_formatter = self._log_formatter_cls(fmt=self.log_format, datefmt=self.log_datefmt)
_debug_handler.setFormatter(_log_formatter)
_debug_handler.setLevel('DEBUG')
log.addHandler(_debug_handler)
try:
yield
except Exception as ex:
_, _, exc_traceback = sys.exc_info()
msg = traceback.format_exception(ex.__class__, ex, exc_traceback)
for line in msg:
self.log.debug(line)
if isinstance(ex, SystemExit):
print('An error occured. See the log file for details: ', log_path)
raise
print('An error occured.')
print(msg[-1].strip())
print('See the log file for details: ', log_path)
self.exit(1)
else:
log.removeHandler(_debug_handler)
_debug_handler.flush()
_debug_handler.close()
try:
os.remove(log_path)
except FileNotFoundError:
pass
log.removeHandler(_debug_handler)