Source code for meersolar.crystalball.logger_init

# -*- coding: utf-8 -*-

import logging
import sys

from loguru import logger


[docs] class InterceptHandler(logging.Handler): """Intercept logging messages and reroute them to the loguru."""
[docs] def emit(self, record): # Get corresponding Loguru level if it exists try: level = logger.level(record.levelname).name except ValueError: level = record.levelno # Find caller from where originated the logged message frame, depth = logging.currentframe(), 2 while frame.f_code.co_filename == logging.__file__: frame = frame.f_back depth += 1 ( logger.opt(depth=depth, exception=record.exc_info).log( level, record.getMessage() ) )
logging.basicConfig(handlers=[InterceptHandler()], level=0) # Put together a formatting string for the logger. # Split into pieces to improve legibility. tim_fmt = "<green>{time:YYYY-MM-DD HH:mm:ss}</green>" lvl_fmt = "<level>{level: <8}</level>" src_fmt = "<cyan>{module}</cyan>:<cyan>{function}</cyan>" msg_fmt = "<level>{message}</level>" fmt = " | ".join([tim_fmt, lvl_fmt, src_fmt, msg_fmt]) config = { "handlers": [ {"sink": sys.stderr, "level": "INFO", "format": fmt}, # {"sink": "{time:YYYYMMDD_HHmmss}_crystalball.log", # "level": "DEBUG", # "format": fmt, # } ], } logger.configure(**config)