diff options
Diffstat (limited to 'debug_toolbar/panels/logger.py')
| -rw-r--r-- | debug_toolbar/panels/logger.py | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/debug_toolbar/panels/logger.py b/debug_toolbar/panels/logger.py deleted file mode 100644 index 45c995a..0000000 --- a/debug_toolbar/panels/logger.py +++ /dev/null @@ -1,139 +0,0 @@ -from __future__ import unicode_literals - -import datetime -import logging -try: - import threading -except ImportError: - threading = None -from django.utils.translation import ungettext, ugettext_lazy as _ -from debug_toolbar.panels import DebugPanel - -MESSAGE_IF_STRING_REPRESENTATION_INVALID = '[Could not get log message]' - - -class LogCollector(object): - def __init__(self): - if threading is None: - raise NotImplementedError( - "threading module is not available, " - "the logging panel cannot be used without it") - self.records = {} # a dictionary that maps threads to log records - - def add_record(self, record, thread=None): - # Avoid logging SQL queries since they are already in the SQL panel - # TODO: Make this check whether SQL panel is enabled - if record.get('channel', '') == 'django.db.backends': - return - - self.get_records(thread).append(record) - - def get_records(self, thread=None): - """ - Returns a list of records for the provided thread, of if none is provided, - returns a list for the current thread. - """ - if thread is None: - thread = threading.currentThread() - if thread not in self.records: - self.records[thread] = [] - return self.records[thread] - - def clear_records(self, thread=None): - if thread is None: - thread = threading.currentThread() - if thread in self.records: - del self.records[thread] - - -class ThreadTrackingHandler(logging.Handler): - def __init__(self, collector): - logging.Handler.__init__(self) - self.collector = collector - - def emit(self, record): - try: - message = record.getMessage() - except Exception: - message = MESSAGE_IF_STRING_REPRESENTATION_INVALID - - record = { - 'message': message, - 'time': datetime.datetime.fromtimestamp(record.created), - 'level': record.levelname, - 'file': record.pathname, - 'line': record.lineno, - 'channel': record.name, - } - self.collector.add_record(record) - - -collector = LogCollector() -logging_handler = ThreadTrackingHandler(collector) -logging.root.setLevel(logging.NOTSET) -logging.root.addHandler(logging_handler) # register with logging - -# We don't use enable/disable_instrumentation because we can't make these -# functions thread-safe and (hopefully) logging isn't too expensive. - -try: - import logbook - logbook_supported = True -except ImportError: - # logbook support is optional, so fail silently - logbook_supported = False - -if logbook_supported: - class LogbookThreadTrackingHandler(logbook.handlers.Handler): - def __init__(self, collector): - logbook.handlers.Handler.__init__(self, bubble=True) - self.collector = collector - - def emit(self, record): - record = { - 'message': record.message, - 'time': record.time, - 'level': record.level_name, - 'file': record.filename, - 'line': record.lineno, - 'channel': record.channel, - } - self.collector.add_record(record) - - logbook_handler = LogbookThreadTrackingHandler(collector) - logbook_handler.push_application() # register with logbook - - -class LoggingPanel(DebugPanel): - name = 'Logging' - template = 'debug_toolbar/panels/logger.html' - has_content = True - - def __init__(self, *args, **kwargs): - super(LoggingPanel, self).__init__(*args, **kwargs) - self._records = {} - - def process_request(self, request): - collector.clear_records() - - def process_response(self, request, response): - records = self.get_and_delete() - self.record_stats({'records': records}) - - def get_and_delete(self): - records = collector.get_records() - self._records[threading.currentThread()] = records - collector.clear_records() - return records - - def nav_title(self): - return _("Logging") - - def nav_subtitle(self): - records = self._records[threading.currentThread()] - record_count = len(records) - return ungettext('%(count)s message', '%(count)s messages', - record_count) % {'count': record_count} - - def title(self): - return _('Log Messages') |
