Merge pull request #979 from jodal/feature/trace-logging

Add support for TRACE level logging
This commit is contained in:
Thomas Adamcik 2015-02-12 20:08:49 +01:00
commit 69d3f90628
4 changed files with 34 additions and 8 deletions

View File

@ -26,6 +26,21 @@ v0.20.0 (UNRELEASED)
- Make the ``mopidy`` command print a friendly error message if the
:mod:`gobject` Python module cannot be imported. (Fixes: :issue:`836`)
- Add support for repeating the :cmdoption:`-v <mopidy -v>` argument four times
to set the log level for all loggers to the lowest possible value, including
log records at levels lover than ``DEBUG`` too.
**Configuration**
- Add support for the log level value ``all`` to the loglevels configurations.
This can be used to show absolutely all log records, including those at
custom levels below ``DEBUG``.
**Logging**
- Add custom log level ``TRACE`` (numerical level 5), which can be used by
Mopidy and extensions to log at an even more detailed level than ``DEBUG``.
**Local backend**
- Add cover URL to all scanned files with MusicBrainz album IDs. (Fixes:
@ -50,7 +65,7 @@ v0.20.0 (UNRELEASED)
- Enable browsing of artist references, in addition to albums and playlists.
(PR: :issue:`884`)
- Share a single mapping between names and URIs across all MPD sessions. (Fixes:
:issue:`934`, PR: :issue:`968`)

View File

@ -200,8 +200,8 @@ class List(ConfigValue):
class LogLevel(ConfigValue):
"""Log level value.
Expects one of ``critical``, ``error``, ``warning``, ``info``, ``debug``
with any casing.
Expects one of ``critical``, ``error``, ``warning``, ``info``, ``debug``,
or ``all``, with any casing.
"""
levels = {
b'critical': logging.CRITICAL,
@ -209,6 +209,7 @@ class LogLevel(ConfigValue):
b'warning': logging.WARNING,
b'info': logging.INFO,
b'debug': logging.DEBUG,
b'all': logging.NOTSET,
}
def deserialize(self, value):

View File

@ -12,8 +12,12 @@ LOG_LEVELS = {
1: dict(root=logging.WARNING, mopidy=logging.DEBUG),
2: dict(root=logging.INFO, mopidy=logging.DEBUG),
3: dict(root=logging.DEBUG, mopidy=logging.DEBUG),
4: dict(root=logging.NOTSET, mopidy=logging.NOTSET),
}
# Custom log level which has even lower priority than DEBUG
TRACE_LOG_LEVEL = 5
class DelayedHandler(logging.Handler):
def __init__(self):
@ -42,6 +46,8 @@ def bootstrap_delayed_logging():
def setup_logging(config, verbosity_level, save_debug_log):
logging.addLevelName(TRACE_LOG_LEVEL, 'TRACE')
logging.captureWarnings(True)
if config['logging']['config_file']:
@ -137,6 +143,7 @@ class ColorizingStreamHandler(logging.StreamHandler):
# Map logging levels to (background, foreground, bold/intense)
level_map = {
TRACE_LOG_LEVEL: (None, 'blue', False),
logging.DEBUG: (None, 'blue', False),
logging.INFO: (None, 'white', False),
logging.WARNING: (None, 'yellow', False),

View File

@ -281,11 +281,14 @@ class ListTest(unittest.TestCase):
class LogLevelTest(unittest.TestCase):
levels = {'critical': logging.CRITICAL,
'error': logging.ERROR,
'warning': logging.WARNING,
'info': logging.INFO,
'debug': logging.DEBUG}
levels = {
'critical': logging.CRITICAL,
'error': logging.ERROR,
'warning': logging.WARNING,
'info': logging.INFO,
'debug': logging.DEBUG,
'all': logging.NOTSET,
}
def test_deserialize_conversion_success(self):
value = types.LogLevel()