config: Switch logging to new config system
This commit is contained in:
parent
73fb143f45
commit
dcb28259f4
@ -49,16 +49,18 @@ def main():
|
|||||||
config_overrides = options.overrides
|
config_overrides = options.overrides
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# TODO: we need a two stage logging setup as we want logging for
|
logging_config = load_config(config_files, config_overrides)
|
||||||
# extension loading and config loading.
|
|
||||||
log.setup_logging(
|
log.setup_logging(
|
||||||
None, options.verbosity_level, options.save_debug_log)
|
logging_config, options.verbosity_level, options.save_debug_log)
|
||||||
extensions = load_extensions()
|
extensions = load_extensions()
|
||||||
raw_config = load_config(config_files, config_overrides, extensions)
|
raw_config = load_config(config_files, config_overrides, extensions)
|
||||||
extensions = filter_enabled_extensions(raw_config, extensions)
|
extensions = filter_enabled_extensions(raw_config, extensions)
|
||||||
config = validate_config(raw_config, extensions)
|
config = validate_config(raw_config, config_schemas, extensions)
|
||||||
|
log.setup_log_levels(config)
|
||||||
check_old_folders()
|
check_old_folders()
|
||||||
setup_settings()
|
setup_settings()
|
||||||
|
# Anything that wants to exit after this point must use
|
||||||
|
# process.exit_proces as actors have been started.
|
||||||
audio = setup_audio(config)
|
audio = setup_audio(config)
|
||||||
backends = setup_backends(config, extensions, audio)
|
backends = setup_backends(config, extensions, audio)
|
||||||
core = setup_core(audio, backends)
|
core = setup_core(audio, backends)
|
||||||
@ -140,7 +142,7 @@ def show_config_callback(option, opt, value, parser):
|
|||||||
extensions = load_extensions()
|
extensions = load_extensions()
|
||||||
raw_config = load_config(files, overrides, extensions)
|
raw_config = load_config(files, overrides, extensions)
|
||||||
enabled_extensions = filter_enabled_extensions(raw_config, extensions)
|
enabled_extensions = filter_enabled_extensions(raw_config, extensions)
|
||||||
config = validate_config(raw_config, enabled_extensions)
|
config = validate_config(raw_config, config_schemas, enabled_extensions)
|
||||||
|
|
||||||
output = []
|
output = []
|
||||||
for section_name, schema in config_schemas.items():
|
for section_name, schema in config_schemas.items():
|
||||||
@ -235,22 +237,24 @@ def filter_enabled_extensions(raw_config, extensions):
|
|||||||
return enabled_extensions
|
return enabled_extensions
|
||||||
|
|
||||||
|
|
||||||
def load_config(files, overrides, extensions):
|
def load_config(files, overrides, extensions=None):
|
||||||
parser = configparser.RawConfigParser()
|
parser = configparser.RawConfigParser()
|
||||||
|
|
||||||
files = [path.expand_path(f) for f in files]
|
files = [path.expand_path(f) for f in files]
|
||||||
sources = ['builtin-defaults'] + files + ['command-line']
|
sources = ['builtin-defaults'] + files + ['command-line']
|
||||||
logging.info('Loading config from: %s', ', '.join(sources))
|
logger.info('Loading config from: %s', ', '.join(sources))
|
||||||
|
|
||||||
# Read default core config
|
# Read default core config
|
||||||
parser.readfp(StringIO.StringIO(default_config))
|
parser.readfp(StringIO.StringIO(default_config))
|
||||||
|
|
||||||
# Read default extension config
|
# Read default extension config
|
||||||
for extension in extensions:
|
for extension in extensions or []:
|
||||||
parser.readfp(StringIO.StringIO(extension.get_default_config()))
|
parser.readfp(StringIO.StringIO(extension.get_default_config()))
|
||||||
|
|
||||||
# Load config from a series of config files
|
# Load config from a series of config files
|
||||||
for filename in files:
|
for filename in files:
|
||||||
|
# TODO: if this is the initial load of logging config we might not have
|
||||||
|
# a logger at this point, we might want to handle this better.
|
||||||
try:
|
try:
|
||||||
filehandle = codecs.open(filename, encoding='utf-8')
|
filehandle = codecs.open(filename, encoding='utf-8')
|
||||||
parser.readfp(filehandle)
|
parser.readfp(filehandle)
|
||||||
@ -259,7 +263,7 @@ def load_config(files, overrides, extensions):
|
|||||||
continue
|
continue
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
logger.error('Config file %s is not UTF-8 encoded', filename)
|
logger.error('Config file %s is not UTF-8 encoded', filename)
|
||||||
process.exit_process()
|
sys.exit(1)
|
||||||
|
|
||||||
raw_config = {}
|
raw_config = {}
|
||||||
for section in parser.sections():
|
for section in parser.sections():
|
||||||
@ -271,10 +275,10 @@ def load_config(files, overrides, extensions):
|
|||||||
return raw_config
|
return raw_config
|
||||||
|
|
||||||
|
|
||||||
def validate_config(raw_config, extensions):
|
def validate_config(raw_config, schemas, extensions=None):
|
||||||
# Collect config schemas to validate against
|
# Collect config schemas to validate against
|
||||||
sections_and_schemas = config_schemas.items()
|
sections_and_schemas = schemas.items()
|
||||||
for extension in extensions:
|
for extension in extensions or []:
|
||||||
sections_and_schemas.append(
|
sections_and_schemas.append(
|
||||||
(extension.ext_name, extension.get_config_schema()))
|
(extension.ext_name, extension.get_config_schema()))
|
||||||
|
|
||||||
|
|||||||
@ -5,11 +5,12 @@ from mopidy.utils import config
|
|||||||
|
|
||||||
default_config = """
|
default_config = """
|
||||||
[logging]
|
[logging]
|
||||||
console_format = %(levelname)-8s $(message)s
|
console_format = %(levelname)-8s %(message)s
|
||||||
debug_format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)s\n %(message)s
|
debug_format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)s\n %(message)s
|
||||||
debug_file = mopidy.log
|
debug_file = mopidy.log
|
||||||
|
|
||||||
[logging.levels]
|
[logging.levels]
|
||||||
|
pykka = info
|
||||||
|
|
||||||
[audio]
|
[audio]
|
||||||
mixer = autoaudiomixer
|
mixer = autoaudiomixer
|
||||||
|
|||||||
@ -32,6 +32,9 @@ port = 6680
|
|||||||
# "/mopidy" will continue to work as usual even if you change this setting.
|
# "/mopidy" will continue to work as usual even if you change this setting.
|
||||||
#
|
#
|
||||||
static_dir =
|
static_dir =
|
||||||
|
|
||||||
|
[logging.levels]
|
||||||
|
cherrypy = warning
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__doc__ = """
|
__doc__ = """
|
||||||
|
|||||||
@ -3,39 +3,44 @@ from __future__ import unicode_literals
|
|||||||
import logging
|
import logging
|
||||||
import logging.handlers
|
import logging.handlers
|
||||||
|
|
||||||
from mopidy import settings
|
|
||||||
from . import deps, versioning
|
from . import deps, versioning
|
||||||
|
|
||||||
|
|
||||||
def setup_logging(config, verbosity_level, save_debug_log):
|
def setup_logging(config, verbosity_level, save_debug_log):
|
||||||
setup_root_logger()
|
setup_root_logger()
|
||||||
setup_console_logging(verbosity_level)
|
setup_console_logging(config, verbosity_level)
|
||||||
if save_debug_log:
|
if save_debug_log:
|
||||||
setup_debug_logging_to_file()
|
setup_debug_logging_to_file(config)
|
||||||
if hasattr(logging, 'captureWarnings'):
|
if hasattr(logging, 'captureWarnings'):
|
||||||
# New in Python 2.7
|
# New in Python 2.7
|
||||||
logging.captureWarnings(True)
|
logging.captureWarnings(True)
|
||||||
|
|
||||||
logger = logging.getLogger('mopidy.utils.log')
|
logger = logging.getLogger('mopidy.utils.log')
|
||||||
logger.info('Starting Mopidy %s', versioning.get_version())
|
logger.info('Starting Mopidy %s', versioning.get_version())
|
||||||
logger.info('%(name)s: %(version)s', deps.platform_info())
|
logger.info('%(name)s: %(version)s', deps.platform_info())
|
||||||
logger.info('%(name)s: %(version)s', deps.python_info())
|
logger.info('%(name)s: %(version)s', deps.python_info())
|
||||||
|
|
||||||
|
|
||||||
|
def setup_log_levels(config):
|
||||||
|
for name, level in config['logging.levels'].items():
|
||||||
|
logging.getLogger(name).setLevel(level)
|
||||||
|
|
||||||
|
|
||||||
def setup_root_logger():
|
def setup_root_logger():
|
||||||
root = logging.getLogger('')
|
root = logging.getLogger('')
|
||||||
root.setLevel(logging.DEBUG)
|
root.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
|
||||||
def setup_console_logging(verbosity_level):
|
def setup_console_logging(config, verbosity_level):
|
||||||
if verbosity_level == 0:
|
if verbosity_level == 0:
|
||||||
log_level = logging.WARNING
|
log_level = logging.WARNING
|
||||||
log_format = settings.CONSOLE_LOG_FORMAT
|
log_format = config['logging']['console_format']
|
||||||
elif verbosity_level >= 2:
|
elif verbosity_level >= 2:
|
||||||
log_level = logging.DEBUG
|
log_level = logging.DEBUG
|
||||||
log_format = settings.DEBUG_LOG_FORMAT
|
log_format = config['logging']['debug_format']
|
||||||
else:
|
else:
|
||||||
log_level = logging.INFO
|
log_level = logging.INFO
|
||||||
log_format = settings.CONSOLE_LOG_FORMAT
|
log_format = config['logging']['console_format']
|
||||||
formatter = logging.Formatter(log_format)
|
formatter = logging.Formatter(log_format)
|
||||||
handler = logging.StreamHandler()
|
handler = logging.StreamHandler()
|
||||||
handler.setFormatter(formatter)
|
handler.setFormatter(formatter)
|
||||||
@ -43,17 +48,11 @@ def setup_console_logging(verbosity_level):
|
|||||||
root = logging.getLogger('')
|
root = logging.getLogger('')
|
||||||
root.addHandler(handler)
|
root.addHandler(handler)
|
||||||
|
|
||||||
if verbosity_level < 3:
|
|
||||||
logging.getLogger('pykka').setLevel(logging.INFO)
|
|
||||||
|
|
||||||
if verbosity_level < 2:
|
def setup_debug_logging_to_file(config):
|
||||||
logging.getLogger('cherrypy').setLevel(logging.WARNING)
|
formatter = logging.Formatter(config['logging']['debug_format'])
|
||||||
|
|
||||||
|
|
||||||
def setup_debug_logging_to_file():
|
|
||||||
formatter = logging.Formatter(settings.DEBUG_LOG_FORMAT)
|
|
||||||
handler = logging.handlers.RotatingFileHandler(
|
handler = logging.handlers.RotatingFileHandler(
|
||||||
settings.DEBUG_LOG_FILENAME, maxBytes=10485760, backupCount=3)
|
config['logging']['debug_file'], maxBytes=10485760, backupCount=3)
|
||||||
handler.setFormatter(formatter)
|
handler.setFormatter(formatter)
|
||||||
handler.setLevel(logging.DEBUG)
|
handler.setLevel(logging.DEBUG)
|
||||||
root = logging.getLogger('')
|
root = logging.getLogger('')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user