Source code for planetary_coverage.misc.logger

"""Miscellaneous logger module."""

import logging
import sys


class InfoFilter(logging.Filter):
    """Filter only record with level INFO."""
    def filter(self, record):
        return record.levelno == logging.INFO


class NotInfoFilter(logging.Filter):
    """Filter only record not with level INFO."""
    def filter(self, record):
        return record.levelno != logging.INFO


[docs]def logger(name, info_stdout=False): """Create a custom logger with its debugger.""" snake_name = name.replace(' ', '_').lower() logger = logging.getLogger(f'{__package__}.{snake_name}') if logger.hasHandlers(): logger.handlers.clear() stderr = logging.StreamHandler() logger.addHandler(stderr) fmt = logging.Formatter(f'[{name}] %(message)s') stderr.setFormatter(fmt) if info_stdout: stdout = logging.StreamHandler(sys.stdout) stdout.setLevel(logging.INFO) stdout.setFormatter(fmt) logger.addHandler(stdout) # Filter INFO to send them to stdout stdout.addFilter(InfoFilter()) stderr.addFilter(NotInfoFilter()) logger.setLevel(logging.INFO) else: logger.setLevel(logging.WARNING) return logger, debug(logger, default=logger.level)
def debug(logger, default=logging.WARNING): """Custom debug toggler.""" def _debug(enabled=True): """Change logger level.""" if enabled == 'info': logger.setLevel(logging.INFO) elif enabled == 'warning': logger.setLevel(logging.WARNING) elif enabled: logger.setLevel(logging.DEBUG) else: logger.setLevel(default) logger.info('Change logger level to %s', logging.getLevelName(logger.level)) return _debug