Skip to content

Commit 488826d

Browse files
committed
🐛 fix: lower log level for echo
1 parent 30821b5 commit 488826d

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

nonebot_plugin_orm/__init__.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from typing import Any, AsyncGenerator
99

1010
from nonebot.params import Depends
11-
from nonebot.log import LoguruHandler
1211
from nonebot.plugin import PluginMetadata
1312
import sqlalchemy.ext.asyncio as sa_asyncio
1413
from sqlalchemy.util import greenlet_spawn
@@ -19,8 +18,8 @@
1918

2019
from . import migrate
2120
from .model import Model
22-
from .utils import StreamToLogger
2321
from .config import Config, plugin_config
22+
from .utils import LoguruHandler, StreamToLogger
2423

2524
if sys.version_info >= (3, 10):
2625
from typing import Annotated
@@ -205,17 +204,17 @@ def _init_table():
205204
def _init_logger():
206205
log_level = _driver.config.log_level
207206
if isinstance(log_level, str):
208-
log_level = logging.getLevelName(log_level)
207+
log_level = logger.level(log_level).no
209208

210209
levels = {"alembic": log_level, "sqlalchemy": log_level}
211210
if not plugin_config.sqlalchemy_echo:
212211
levels["sqlalchemy.engine"] = levels["sqlalchemy.pool"] = logging.WARNING
213212

214213
handler = LoguruHandler()
215214
for name, level in levels.items():
216-
logger = logging.getLogger(name)
217-
logger.addHandler(handler)
218-
logger.setLevel(level)
215+
l = logging.getLogger(name)
216+
l.addHandler(handler)
217+
l.setLevel(level)
219218

220219

221220
_init_logger()

nonebot_plugin_orm/utils.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,40 @@ def __eq__(self, __o: _T) -> _T:
4444
return_eq = _ReturnEq()
4545

4646

47+
class LoguruHandler(logging.Handler):
48+
def emit(self, record: logging.LogRecord):
49+
try:
50+
level = logger.level(record.levelname).name
51+
if record.levelno <= logging.INFO:
52+
level = {"DEBUG": "TRACE", "INFO": "DEBUG"}.get(level, level)
53+
except ValueError:
54+
level = record.levelno
55+
56+
frame, depth = sys._getframe(6), 6
57+
while frame and frame.f_code.co_filename == logging.__file__:
58+
frame = frame.f_back
59+
depth += 1
60+
61+
logger.opt(depth=depth, exception=record.exc_info).log(
62+
level, record.getMessage()
63+
)
64+
65+
4766
class StreamToLogger(StringIO):
48-
"""Use for startup migrate only"""
67+
"""Use for startup migrate, AlembicConfig.print_stdout() only"""
4968

5069
def __init__(self, level="INFO"):
5170
self._level = level
5271

53-
def write(self, buffer):
72+
def write(self, buffer: str):
73+
frame, depth = sys._getframe(3), 3
74+
while frame and frame.f_code.co_name != "print_stdout":
75+
frame = frame.f_back
76+
depth += 1
77+
depth += 1
78+
5479
for line in buffer.rstrip().splitlines():
55-
# depth 0: this function
56-
# depth 1: click.echo()
57-
# depth 2: click.secho()
58-
logger.opt(depth=3).log(self._level, line.rstrip())
80+
logger.opt(depth=depth).log(self._level, line.rstrip())
5981

6082
def flush(self):
6183
pass
@@ -64,9 +86,9 @@ def flush(self):
6486
def return_progressbar(func: Callable[_P, Iterable[_T]]) -> Callable[_P, Iterable[_T]]:
6587
log_level = get_driver().config.log_level
6688
if isinstance(log_level, str):
67-
log_level = logging.getLevelName(log_level)
89+
log_level = logger.level(log_level).no
6890

69-
if log_level <= logging.INFO:
91+
if log_level <= logger.level("INFO").no:
7092
return func
7193

7294
@wraps(func)

0 commit comments

Comments
 (0)