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 ]
脚本:
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')
做人一定要靠自己