You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.7 KiB

# from https://blog.csdn.net/u011843342/article/details/131925837
import logging
import sys
from typing import Any, Dict
from loguru import logger
LOG_FORMAT = '{time:YYYY-MM-DD HH:mm:ss} [{level}] {module}:{name}:{line} - {message}'
LOG_PATH = "./log"
logger.add(f"{LOG_PATH}/info.log", filter=lambda record: "INFO" in record['level'].name, rotation="10 MB",
retention="3 days", level="INFO", format=LOG_FORMAT)
logger.add(f"{LOG_PATH}/debug.log", filter=lambda record: "DEBUG" in record['level'].name, rotation="10 MB",
retention="3 days", level="DEBUG", format=LOG_FORMAT)
logger.add(f"{LOG_PATH}/error.log", filter=lambda record: "ERROR" in record['level'].name, rotation="10 MB",
retention="1 days", level="ERROR", format=LOG_FORMAT)
S_LOGGING_CONFIG_DEFAULTS: Dict[str, Any] = dict( # no cov
version=1,
disable_existing_loggers=False,
loggers={
"sanic.root": {
"level": "INFO",
"handlers": ["console"],
"propagate": False
},
"sanic.error": {
"level": "INFO",
"handlers": ["error_console"],
"propagate": False,
"qualname": "sanic.error",
},
"sanic.access": {
"level": "INFO",
"handlers": ["access_console"],
"propagate": False,
"qualname": "sanic.access",
},
"sanic.server": {
"level": "INFO",
"handlers": ["console"],
"propagate": False,
"qualname": "sanic.server",
},
},
handlers={
"console": {
"class": "utils.logger.InterceptHandler",
},
"error_console": {
"class": "utils.logger.InterceptHandler",
},
"access_console": {
"class": "utils.logger.InterceptHandler",
},
}
)
class InterceptHandler(logging.Handler):
def emit(self, record: logging.LogRecord):
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__: # type: ignore
frame = frame.f_back # type: ignore
depth += 1
logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())
def setup_log():
logging.root.handlers = [InterceptHandler()]
logging.root.setLevel("DEBUG")
for name in logging.root.manager.loggerDict.keys():
logging.getLogger(name).handlers = []
logging.getLogger(name).propagate = True
# logger.configure(handlers=[{"sink": sys.stdout, "serialize": False}])