From 858098b9467fa5f0d8bf3daa54651670963b7b20 Mon Sep 17 00:00:00 2001 From: yanyongyu Date: Thu, 27 Aug 2020 13:27:42 +0800 Subject: [PATCH] :loud_sound: change log types --- nonebot/__init__.py | 12 +++++---- nonebot/drivers/__init__.py | 3 ++- nonebot/drivers/fastapi.py | 19 +++++++------- nonebot/log.py | 51 ++++++++++++++++++++++++++++++------- nonebot/plugin.py | 12 ++++----- 5 files changed, 67 insertions(+), 30 deletions(-) diff --git a/nonebot/__init__.py b/nonebot/__init__.py index f5578073..db18d177 100644 --- a/nonebot/__init__.py +++ b/nonebot/__init__.py @@ -109,8 +109,8 @@ def get_bots() -> Dict[str, Bot]: return driver.bots -from nonebot.log import logger from nonebot.config import Env, Config +from nonebot.log import logger, default_filter from nonebot.adapters.cqhttp import Bot as CQBot try: @@ -147,11 +147,13 @@ def init(*, _env_file: Optional[str] = None, **kwargs): """ global _driver env = Env() - logger.debug(f"Current Env: {env.environment}") + logger.opt( + colors=True).debug(f"Current Env: {env.environment}") config = Config(**kwargs, _env_file=_env_file or f".env.{env.environment}") - logger.setLevel(logging.DEBUG if config.debug else logging.INFO) - logger.debug(f"Loaded config: {config.dict()}") + default_filter.level = "DEBUG" if config.debug else "INFO" + logger.opt( + colors=True).debug(f"Loaded Config: {config.dict()}") DriverClass: Type[Driver] = getattr(importlib.import_module(config.driver), "Driver") @@ -196,4 +198,4 @@ def run(host: Optional[str] = None, get_driver().run(host, port, *args, **kwargs) -from nonebot.plugin import load_plugins, get_loaded_plugins +from nonebot.plugin import load_plugin, load_plugins, get_loaded_plugins diff --git a/nonebot/drivers/__init__.py b/nonebot/drivers/__init__.py index 2a76f7cd..af8587d1 100644 --- a/nonebot/drivers/__init__.py +++ b/nonebot/drivers/__init__.py @@ -20,7 +20,8 @@ class BaseDriver(abc.ABC): @classmethod def register_adapter(cls, name: str, adapter: Type[Bot]): cls._adapters[name] = adapter - logger.debug(f'Succeeded to load adapter "{name}"') + logger.opt( + colors=True).debug(f'Succeeded to load adapter "{name}"') @property @abc.abstractmethod diff --git a/nonebot/drivers/fastapi.py b/nonebot/drivers/fastapi.py index 7dcb0527..3292f5df 100644 --- a/nonebot/drivers/fastapi.py +++ b/nonebot/drivers/fastapi.py @@ -84,17 +84,18 @@ class Driver(BaseDriver): LOGGING_CONFIG = { "version": 1, "disable_existing_loggers": False, - "formatters": { - "default": { - "()": "logging.Formatter", - "fmt": "[%(asctime)s %(name)s] %(levelname)s: %(message)s", - }, - }, + # "formatters": { + # "default": { + # "()": "logging.Formatter", + # "fmt": "[%(asctime)s %(name)s] %(levelname)s: %(message)s", + # }, + # }, "handlers": { "default": { - "formatter": "default", - "class": "logging.StreamHandler", - "stream": "ext://sys.stdout", + "class": "nonebot.log.LoguruHandler", + # "formatter": "default", + # "class": "logging.StreamHandler", + # "stream": "ext://sys.stdout", }, }, "loggers": { diff --git a/nonebot/log.py b/nonebot/log.py index 8218ca57..3881dbf4 100644 --- a/nonebot/log.py +++ b/nonebot/log.py @@ -13,7 +13,7 @@ NoneBot 使用 `loguru`_ 来记录日志信息。 """ import sys -# import logging +import logging from loguru import logger as logger_ @@ -35,10 +35,6 @@ logger = logger_ .. code-block:: python from nonebot.log import logger - - # 也可以这样 - import logging - logger = logging.getLogger("nonebot") """ # default_handler = logging.StreamHandler(sys.stdout) @@ -46,8 +42,45 @@ logger = logger_ # logging.Formatter("[%(asctime)s %(name)s] %(levelname)s: %(message)s")) # logger.addHandler(default_handler) + +class Filter: + + def __init__(self) -> None: + self.level = "DEBUG" + + def __call__(self, record): + record["name"] = record["name"].split(".")[0] + levelno = logger.level(self.level).no + return record["level"].no >= levelno + + +class LoguruHandler(logging.Handler): + + def emit(self, record): + try: + level = logger.level(record.levelname).name + except ValueError: + level = record.levelno + + 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()) + + logger.remove() -default_format = ("{level: <8}|" - "{time:MM-DD HH:mm:ss}|" - "{message}") -logger.add(sys.stdout, colorize=True, format=default_format) +default_filter = Filter() +default_format = ( + "{time:MM-DD HH:mm:ss}|" + "{level: ^8}|" + "{name}| " + # "{function}:{line}| " + "{message}") +logger.add(sys.stdout, + colorize=True, + diagnose=False, + filter=default_filter, + format=default_format) diff --git a/nonebot/plugin.py b/nonebot/plugin.py index 0ea04046..51e38b11 100644 --- a/nonebot/plugin.py +++ b/nonebot/plugin.py @@ -170,11 +170,11 @@ def load_plugin(module_path: str) -> Optional[Plugin]: module = importlib.import_module(module_path) plugin = Plugin(module_path, module, _tmp_matchers.copy()) plugins[module_path] = plugin - logger.info(f"Succeeded to import \"{module_path}\"") + logger.opt(colors=True).info(f'Succeeded to import "{module_path}"') return plugin except Exception as e: - logger.error(f"Failed to import \"{module_path}\", error: {e}") - logger.exception(e) + logger.opt(colors=True, exception=e).error( + f'Failed to import "{module_path}"') return None @@ -196,10 +196,10 @@ def load_plugins(*plugin_dir: str) -> Set[Plugin]: plugin = Plugin(name, module, _tmp_matchers.copy()) plugins[name] = plugin loaded_plugins.add(plugin) - logger.info(f"Succeeded to import \"{name}\"") + logger.opt(colors=True).info(f'Succeeded to import "{name}"') except Exception as e: - logger.error(f"Failed to import \"{name}\", error: {e}") - logger.exception(e) + logger.opt(colors=True, exception=e).error( + f'Failed to import "{name}"') return loaded_plugins