Пример #1
0
def configure_logger(level="INFO", fmt=None):
    """This function configure and returns a logger instance.

    If coloredlogs is installed the messages in terminal will have different colors acording to logging level.
    If verboselogs is installed ist supports additional logging levels and color variations.

    Args:
        level (str, optional): logging level. Defaults to "INFO".
        fmt (str, optional): message format template: fields, order, etc. Defaults to None, which uses a "basic_format".

    Returns:
        logging.Logger: a logger instance.
    """
    # create directory of necessary
    if not os.path.exists(__logger_logdir):
        os.mkdir(__logger_logdir)

    # setup logger once. Note that basicConfig does nothing (as stated in the
    # documentation) if the root logger was already setup. So we can basically
    # re-call it here as often as we want.
    if fmt is None:
        fmt = __basic_format

    logging.basicConfig(level=level, format=fmt, filename=__logger_filename)

    if coloredlogs is not None:
        coloredlogs.install(
            level=level,
            datefmt="%H:%M:%S",  # default includes date
            # default format:
            # %(asctime)s %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s
            fmt=__colored_format,
        )

    logger = getLogger(__logger_name)
    return logger
Пример #2
0
# Standard library modules.
import os
import time

# Modules included in our package.
import colouredlogs

# If my verbose logger is installed, we'll use that for the demo.
try:
    from verboselogs import VerboseLogger as getLogger
except ImportError:
    from logging import getLogger

# Initialize a logger for this module.
logger = getLogger(__name__)

DEMO_DELAY = float(os.environ.get('COLOUREDLOGS_DEMO_DELAY', '1'))
"""The number of seconds between each message emitted by :func:`demonstrate_coloured_logging()`."""


def demonstrate_coloured_logging():
    """Interactively demonstrate the :mod:`colouredlogs` package."""
    # Determine the available logging levels and order them by numeric value.
    decorated_levels = []
    defined_levels = colouredlogs.find_defined_levels()
    normalizer = colouredlogs.NameNormalizer()
    for name, level in defined_levels.items():
        if name != 'NOTSET':
            item = (level, normalizer.normalize_name(name))
            if item not in decorated_levels:
Пример #3
0
# Standard library modules.
import os
import time

# Modules included in our package.
import coloredlogs

# If my verbose logger is installed, we'll use that for the demo.
try:
    from verboselogs import VerboseLogger as getLogger
except ImportError:
    from logging import getLogger

# Initialize a logger for this module.
logger = getLogger(__name__)

DEMO_DELAY = float(os.environ.get('COLOREDLOGS_DEMO_DELAY', '1'))
"""The number of seconds between each message emitted by :func:`demonstrate_colored_logging()`."""


def demonstrate_colored_logging():
    """A simple demonstration of the `coloredlogs` package."""
    # Initialize colored output to the terminal, default to the
    # DEBUG logging level but enable the user the customize it.
    coloredlogs.install(level=os.environ.get('COLOREDLOGS_LOG_LEVEL', 'DEBUG'))
    # Print some examples with different timestamps.
    for level in ['debug', 'verbose', 'info', 'warn', 'error', 'critical']:
        if hasattr(logger, level):
            getattr(logger, level)("message with level %r", level)
            time.sleep(DEMO_DELAY)