You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用.yaml文件配置Python logging仅输出指定级别的日志

可行配置方案

1. 修改Python代码,新增自定义过滤器

要实现指定级别单独过滤,需要先定义自定义过滤器类,放在配置加载逻辑之前:

import logging
import logging.config
import yaml

# 仅放行INFO级别日志的过滤器
class InfoOnlyFilter(logging.Filter):
    def filter(self, record):
        return record.levelno == logging.INFO

with open('logging.yaml', 'rt') as f:
    config = yaml.safe_load(f.read())
logging.config.dictConfig(config)

logger = logging.getLogger('module1')

# 测试代码
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

2. 修改logging.yaml配置

version: 1
# 注册自定义过滤器
filters:
  info_only:
    () : __main__.InfoOnlyFilter
formatters:
  simple:
    format: '{asctime} : {name} : {levelname} : {message}'
    style: '{'
handlers:
  # 控制台处理器:仅输出INFO级别
  console:
    class: logging.StreamHandler
    level: INFO
    formatter: simple
    filters: [info_only]
    stream: ext://sys.stdout
  # 文件处理器:输出WARNING及以上级别
  file_handler:
    class: logging.FileHandler
    level: WARNING
    formatter: simple
    filename: logfile.log
    encoding: utf-8
loggers:
  module1:
    level: DEBUG
    handlers: [console, file_handler]
    propagate: no # 修正原配置拼写错误,原拼写propogate无效
root:
  level: DEBUG
  handlers: [console, file_handler]

配置说明

  • yaml中的()是dictConfig的专用语法,用于指定自定义类的实例化路径,如果你将InfoOnlyFilter定义在其他模块,将__main__替换为对应模块名即可
  • 控制台处理器通过info_only过滤器限制仅输出INFO级别,不会输出更高等级的WARNING、ERROR等日志
  • 文件处理器直接设置level: WARNING,会自动捕获WARNING、ERROR、CRITICAL三个级别的日志写入文件
  • 原配置的propogate为拼写错误,修正为propagate后可避免日志重复输出问题

运行代码后,控制台仅会打印INFO级别的日志,logfile.log文件中会保存WARNING、ERROR、CRITICAL三类日志,完全匹配需求。

内容的提问来源于stack exchange,提问作者Ahmad Ismail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:36:07