Source code for mllaunchpad.logutil
# Stdlib imports
import logging
import logging.config
import os
import warnings
# Third-party imports
import yaml
LOG_CONF_FILENAME_DEFAULT = "./LAUNCHPAD_LOG.yml"
LOG_CONF_FILENAME_ENV = os.environ.get(
"LAUNCHPAD_LOG", LOG_CONF_FILENAME_DEFAULT
)
[docs]def init_logging(filename=LOG_CONF_FILENAME_ENV, verbose=False):
"""Only called from wsgi or cli module (mllaunchpad-as-an-app).
It's important to not change logging/warning config from the library-only
code.
"""
# Ignore all deprecation warnings:
warnings.filterwarnings(action="ignore", category=DeprecationWarning)
# Except from mllaunchpad itself:
warnings.filterwarnings(
action="default", category=DeprecationWarning, module="mllaunchpad.*"
)
try:
with open(filename, encoding="utf-8") as file:
loaded_logging_config = yaml.safe_load(file)
logging.config.dictConfig(loaded_logging_config)
except FileNotFoundError:
loaded_logging_config = None
logging.basicConfig(
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
level=logging.DEBUG if verbose else logging.INFO,
)
logging.captureWarnings(True)
new_logger = logging.getLogger(__name__)
if verbose:
new_logger.setLevel(logging.DEBUG)
if not loaded_logging_config:
new_logger.warning(
"Logging filename environment variable LAUNCHPAD_LOG not set, "
"and ./LAUNCHPAD_LOG.yml not found: using default logging "
"configuration"
)
elif filename == LOG_CONF_FILENAME_DEFAULT:
new_logger.warning(
"Logging filename environment variable LAUNCHPAD_LOG not set, "
"using default logging configuration file ./LAUNCHPAD_LOG.yml"
)
return new_logger