-
-
Notifications
You must be signed in to change notification settings - Fork 646
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
操作系统
Windows
Python 版本
3.13.2
NoneBot 版本
2.4.3
适配器
无
协议端
无
描述问题
相关文档
文档 - 深入 - 配置 - 内置配置项 - Log Level 中说 log_level 的类型为 int | str,表示 Loguru 的日志等级。
问题
但是,如果我在 .env 中写 LOG_LEVEL=10,或者使用环境变量 export LOG_LEVEL=10,解析配置的时候会把这个 10 解析为字符串的 "10",从而引发日志错误。
--- Logging error in Loguru Handler #1 ---
...
ValueError: Level '10' does not exist
--- End of logging error ---
进一步的说明
打印 nonebot.get_driver().config 也可以看到这一点:
>>> print(repr(nonebot.get_driver().config))
Config(..., log_level='10', ...)log_level 被错误地解析为了字符串的 "10",而我想要的是数字 10。
可能的解决办法
我能想到的解决办法是,使用 pydantic 的 field_validator,为 log_level 添加一个类似这样的 field_validator:
class Config(BaseSettings):
log_level: Union[int, str] = "INFO"
...
@field_validator("log_level", mode="after")
@classmethod
def validate_log_level(cls, v: Union[int, str]) -> Union[int, str]:
if isinstance(v, str) and v.isdigit():
return int(v)
elif isinstance(v, str):
return v.upper()
else:
return v或者……修改文档?
复现步骤
-
安装 python 以及 nonebot2[fastapi]
-
新建文件
.env,内容为
LOG_LEVEL=10
- 新建文件
bot.py,内容为
import nonebot
nonebot.init()
print(repr(nonebot.get_driver().config))-
运行
python bot.py -
得到日志错误,并且
config中的log_level是字符串'10'
期望的结果
期望当 log_level 为数字时,能正确解析为数字
截图或日志
No response
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working