61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
import logging
|
|
import sys
|
|
from loguru import logger
|
|
from common.config.log_settings import log_settings
|
|
|
|
|
|
def register(app=None):
|
|
level = log_settings.LOG_LEVEL
|
|
file_path = log_settings.LOG_PATH
|
|
retention = log_settings.LOG_RETENTION
|
|
rotation = log_settings.LOG_ROTATION
|
|
|
|
# intercept everything at the root logger
|
|
logging.root.handlers = [InterceptHandler()]
|
|
logging.root.setLevel(level)
|
|
|
|
# remove every other logger's handlers
|
|
# and propagate to root logger
|
|
for name in logging.root.manager.loggerDict.keys():
|
|
logging.getLogger(name).handlers = []
|
|
logging.getLogger(name).propagate = True
|
|
|
|
# configure loguru
|
|
logger.add(
|
|
sink=sys.stdout
|
|
)
|
|
logger.add(
|
|
sink=file_path,
|
|
level=level,
|
|
retention=retention,
|
|
rotation=rotation
|
|
)
|
|
|
|
logger.disable("pika.adapters")
|
|
logger.disable("pika.connection")
|
|
logger.disable("pika.channel")
|
|
logger.disable("pika.callback")
|
|
logger.disable("pika.frame")
|
|
logger.disable("pika.spec")
|
|
logger.disable("aiormq.connection")
|
|
logger.disable("urllib3.connectionpool")
|
|
|
|
|
|
class InterceptHandler(logging.Handler):
|
|
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()
|
|
)
|