Odoo日志配置参数疑问:log_level、log_handler及模块级日志
Odoo日志配置参数全解析
1. log_level 与 log_handler 的核心作用
- log_level:全局默认日志级别,用于设定所有未单独配置日志级别的logger的输出门槛,取值为小写级别(
debug/info/warn/error)。 - log_handler:细粒度日志处理器配置,格式为
logger_name:LEVEL(空冒号:代表全局所有logger),LEVEL为大写级别(DEBUG/INFO/WARN/ERROR)。它可以针对单个或全部logger单独设定级别,优先级高于全局默认的log_level。
2. log_level = info 与 log_handler= :INFO 的差异
这两个配置的实际效果几乎一致,都是将全局所有logger的日志输出级别设为INFO:
log_level = info:通过全局默认值统一设置所有未单独配置的logger级别。log_handler= :INFO:直接指定全局所有logger的级别为INFO,等同于覆盖全局默认设置。
3. 为何 log_level=error + log_handler=:INFO 仅输出ERROR级别?
这是Python日志系统的双层过滤逻辑导致的:
日志输出需要同时通过logger自身级别过滤和处理器级别过滤:
log_level=error把root logger的级别设为ERROR,意味着root logger只会将ERROR及更高级别的日志传递给处理器,INFO、DEBUG级别的日志在logger层就被过滤掉了。log_handler=:INFO只是给root logger绑定了一个允许输出INFO及以上级别的处理器,但此时处理器根本接收不到INFO及以下的日志——因为logger已经把这些日志拦截了。
如果想让log_handler生效,需要保证logger的级别不高于处理器的级别。比如设置log_level=info + log_handler=:ERROR,此时logger允许INFO及以上日志通过,处理器只保留ERROR及以上,最终只会输出ERROR级别日志。
4. logger_<module_name> 配置的正确性与用法
这种配置是官方支持的正确用法,用于实现模块级的日志粒度控制:
- 格式:
logger_<module_name> = <level>,其中<module_name>是目标Odoo模块的名称(例如logger_sale = debug),<level>为小写日志级别。 - 用途:针对特定模块单独调整日志级别,不会影响其他模块的全局配置。比如调试自定义模块
my_module时,设置logger_my_module = debug,该模块的DEBUG级日志会被输出,其他模块仍遵循全局的log_level设置。
与其他参数的配合规则
logger_<module_name>的优先级高于log_level和全局log_handler设置。- 若同时设置
logger_my_module = error和log_handler=my_module:INFO,由于logger级别为ERROR,处理器即使设为INFO,最终也只会输出ERROR及以上级别的日志(logger先完成过滤)。 - 通常的配合方式是:用
log_level设置全局默认级别,再用logger_<module_name>针对需要调试或重点监控的模块单独调整级别(比如全局设为info,某个模块设为debug)。
内容的提问来源于stack exchange,提问作者Kaikus
相关产品推荐
相关产品推荐

