一、定义一个yml文件
version: 1
disable_existing_loggers: False
formatters:
simple:
format: '%(asctime)s [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stdout
console_err:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stderr
console_file:
class : logging.handlers.TimedRotatingFileHandler
formatter: simple
filename: ../../logs/run.log
interval: 1
backupCount: 30
encoding: utf8
when: D
loggers:
runLogger:
level: INFO
handlers: [console_file]
propagate: 0
root:
level: DEBUG
handlers: [console_err]
- version:schema的版本号,目前官方固定值是1,这个参数看起来是为了方便向后兼容。
- disable_existing_loggers:新创建的logger是否要将老的logger过期。
- formatters:日期的格式(还可以设定一个标准格式,我这里没有用,可以看文档)。
- handlers:logging的hadler,包含多项子设置。
- console:这个是约定的节点命名,通常用户打印信息到控制台。
- class:日志输出流要使用的类,这里使用logging.StreamHandler输出流。
- level:日志级别,不再赘述。
- formatter:要使用的日志格式。
- stream:ext://sys.stdout表示输出到标准输出,ext://是必须的。
- console_err:与console同理,是约定的节点命名,通常用于处理异常。
- console_file:这个是我自定义的,输出到文件的节点。
- class : logging.handlers.TimedRotatingFileHandler,以时间的方式滚动分割。
- filename:文件完整路径。
- interval:增量的频率,我这里要做的是1天。
- backupCount:保留的文件数。
- encoding:文件编码
- when:D表示天,还有H,M等。
- loggers:自定义的logger组。
- runLogger:我自己起的名字,用于记录运行日志。
- handlers:引用上面定义好的某个handler。
- propagate:递归调用日志记录器的级别,0表示不调用,1会调用root。
- root:定义默认的root的logger配置。
二、代码示例
import yaml
import os
import logging.config
class LogUtil:
#创建一个字典,用户保存配置
dictConf = {}
#配置文件的目录
LOGGER_CONF_PATH = '../../conf'
#配置文件的名称
LOGGER_CONF_NAME = 'logging.yml'
#构造方法
def __init__(self):
logYamlPath = self.LOGGER_CONF_PATH + os.sep + self.LOGGER_CONF_NAME
self.dictConf = yaml.load(open(logYamlPath, 'r'))
#获得一个logger
LOGGER_NAME = 'runLogger'
def getLogger(self,loggerName = LOGGER_NAME):
logging.config.dictConfig(self.dictConf)
logger = logging.getLogger(loggerName)
return logger