Source code for tolkein.lib.tolog

#!/usr/bin/env python3
"""Log events."""

import logging
import os


def _logger_config():
    """Configure log format."""
    if os.environ.get("DEBUG"):
        log_format = "%(asctime)s [%(levelname)s] line %(lineno)d %(message)s"
        level = logging.DEBUG
    else:
        log_format = "%(asctime)s [%(levelname)s] %(message)s"
        level = logging.INFO
    return {"level": level, "format": log_format, "filemode": "w"}


[docs]def logger(name="tolkein"): """ Create logger. Args: name (str, optional): Logger name. Defaults to "tolkein". Returns: logging.Logger: A logger instance. """ config = _logger_config() logging.basicConfig(**config) _logger = logging.getLogger(name) _logger.propagate = False # _logger.handlers = [] _logger.setLevel(config["level"]) stream_h = logging.StreamHandler() formatter = logging.Formatter(config["format"]) stream_h.setFormatter(formatter) _logger.addHandler(stream_h) for handler in _logger.handlers: handler.formatter.default_msec_format = "%s.%03d" return _logger
[docs]class DisableLogger: """ Logger context management. .. testsetup:: from tolkein.lib.tolog import logger from tolkein.lib.tolog import DisableLogger my_logger = logger(__name__) .. doctest:: >>> my_logger.info('Print log messages') >>> with DisableLogger(): ... my_logger.info('Disable log messages') >>> my_logger.info('Print log messages again') """
[docs] def __enter__(self): """Set logging level to critical.""" logging.disable(logging.CRITICAL)
[docs] def __exit__(self, x, y, z): """Set logging level back to default.""" logging.disable(logging.NOTSET)
if __name__ == "__main__": import doctest doctest.testmod()