• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
秋天的童话
梦想从此启航
博客园    首页    新随笔    联系   管理    订阅  订阅

Python3 日志打印之logging.config.dictConfig

#函数说明

logging.config.dictConfig(config)

dictConfig函数位于logging.config模块,该函数通过字典参数config对logging进行配置。3.2版本新增的函数

 

##参数说明

config 字典类型,包含以下key:

  • version - 表示版本,该键值为从1开始的整数。该key必选,除此之外,其它key都是可选。
  • formatters - 日志格式化器,其value值为一个字典,该字典的每个键值对都代表一个Formatter,键值对中,key代表Formatter ID(自定义ID),value为字典,描述如何配置相应的Formatter实例。默认格式为 ‘%(message)s’ 
  • filters - 日志过滤器,其value值为一个字典,该字典的每个键值对都代表一个Filter,键值对中,key代表Filter ID(自定义ID),value为字典,描述如何配置相应的Filter实例。
  • handlers - 日志处理器,其value值为一个字典,该字典的每个键值对都代表一个Handler,键值对中,key代表Handler ID(自定义ID),value为字典,描述如何配置相应的Handler实例,包含以下配置key:
  • class (必选). 日志处理器类全称
  • level (可选). 指定该日志处理器需要处理哪些级别的日志,低于该级别的日志将不被该handler处理。level可以为代表日志级别的整数或者表大写字符串,字符串日志级别和数字日志级别对应关系如下:               

    CRITICAL = 50

    FATAL = CRITICAL

    ERROR = 40

    WARNING = 30

    WARN = WARNING

    INFO = 20

    DEBUG = 10

    NOTSET = 0

  • formatter (可选). 指定该日志处理器使用的日志格式化器
  • filters (可选). 制定该日志处理器使用的日志过滤器 
  • # 上述的class配置项的值,可以使用自定义Handler类,此时,如果自定义Handler类的__init__构造函数还需要其它参数来初始化类实例,可以继续添自定义参数,这些自定义参数被当做关键字参数会自动传递给构造函数。
  • loggers - 日志记录器,其value值为一个字典,该字典的每个键值对都代表一个Handler,键值对中,key代表Handler ID,value为字典,描述如何配置相应的Logger实例,包含以下配置key:
  • level (可选). 指定该日志记录器需要记录哪些级别的日志,低于该级别的日志将不被该logger记录。
  • propagate (可选). 指定该日志记录器的propagation配置,为布尔值,即True 或 False,用于控制是否向上遍历父辈日志打印器,进而控制当前日志打印器是否共享父辈打印器的日志处理器。True,向上遍历,否则不向上遍历。
  • filters (可选). 指定该日志记录器使用的日志过滤器
  • handlers (可选). 制定该日志记录器使用的日志处理器
  • root - root logger配置。除了不支持propagate配置项以外,该配置的处理过程同处理其它logger的配置一样,配置规则也一样
  • incremental - 用于判断该config配置是否解释为现有配置的增量配置,还是覆盖原有配置。默认为False,即使用现有fileConfig()API使用的相同语义替换现有配置
  • disable_existing_loggers - 其value为布尔值,表示是否禁用现有日志记录器(root logger除外),默认值为True,即禁用。如果incremental 键值为True,则忽略该配置项

举例说明:

logConfig.yaml

version: 1
formatters:
  standard:
    format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
handlers:
  stdout:
    class: logging.StreamHandler
    level: DEBUG
    formatter: standard
    stream: ext://sys.stdout
  pthMarketValueReport:
    class: logging.handlers.TimedRotatingFileHandler
    level: DEBUG
    formatter: standard
    filename: log/pthMarketValueReport.log
    when: d
    backupCount: 4
    encoding: utf8
  lts:
    class: logging.handlers.TimedRotatingFileHandler
    level: DEBUG
    formatter: standard
    filename: log/lts.log
    when: d
    backupCount: 4
    encoding: utf8
  util:
    class: logging.handlers.TimedRotatingFileHandler
    level: DEBUG
    formatter: standard
    filename: log/util.log
    when: d
    backupCount: 4
    encoding: utf8
  console:
    class: logging.handlers.TimedRotatingFileHandler
    level: DEBUG
    formatter: standard
    filename: log/console.log
    when: d
    backupCount: 4
    encoding: utf8
loggers:
  pthMarketValueReportLogger:
    level: DEBUG
    handlers: [ pthMarketValueReport ]
    propagate: no
  lts:
    level: DEBUG
    handlers: [ lts ]
    propagate: no
  util:
    level: DEBUG
    handlers: [ util ]
    propagate: no
  sampleLogger:
    level: DEBUG
    handlers: [ console ]
    propagate: no
root:
  level: DEBUG
  handlers: [ stdout, console ]
View Code

脚本:

import logging.config
import yaml

def get_yaml_logger(logger_name=None):
    with open('logConfig.yaml', 'r') as f:
        config = yaml.safe_load(f.read())
        logging.config.dictConfig(config)

    logger = logging.getLogger(logger_name)
    ###如果logger_name不存在于loggers中,就返回root
    return logger

logger = get_yaml_logger('sampleLogger')
logger.debug('debug message')
logger.info('info message')
logger.warn('warning message')
logger.error('error message')
logger.critical('critical message')
View Code

 

做人一定要靠自己
posted @ 2023-09-26 14:17  凯-子  阅读(609)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3