一、配置文件logger.ini
[loggers]#logger名称
keys=root,rotatingFileLogger,timeFileLogger
[handlers]#handler名称
keys=consoleHandler,rotatingFileHandler,timeFileHandler
[formatters]#格式名称
keys=simpleFormatter,detailFormatter
[logger_root]#在不指定的情况下默认的logger,必须有,否则报错,root为该logger的名称,在loggers中已经声明
#级别
level=DEBUG
#指定该logger的处理器(名称)
handlers=consoleHandler
[logger_timeFileLogger]#logger,timeFileLogger为该logger的名称,对应loggers中声明的名称
level=WARNING
#指定该logger的处理器的名称,可以是多个
handlers=consoleHandler,timeFileHandler
qualname=timeFileLogger
propagate=0
[logger_rotatingFileLogger]#logger,rotatingFileLogger为该logger的名称,对应loggers中声明的名称
level=DEBUG
#指定该logger的处理器的名称,可以是多个
handlers=consoleHandler,rotatingFileHandler
qualname=rotatingFileLogger
propagate=0
[handler_consoleHandler]#处理器,consoleHandler为该处理器的名称,对应handlers中声明的名称
#指定处理器类,该类一般为控制台打印输出
class=StreamHandler
level=DEBUG
#指定该处理器的日志格式(名称)
formatter=simpleFormatter
#该处理器StreamHandler的参数,在该类中有具体说明
args=(sys.stdout,)
[handler_rotatingFileHandler]#处理器,rotatingFileHandler为该处理器的名称,对应handlers中声明的名称
#指定处理器类,该类用于日志文件的转储
class=handlers.RotatingFileHandler
level=DEBUG
#指定该处理器的日志格式
formatter=simpleFormatter
#handlers.RotatingFileHandler类的参数,意义在该类中说的很明确
args=("tools/logs/access.log", "a", 1*1024*1024, 5)
[handler_timeFileHandler]#处理器,timeFileHandler为该处理器的名称,对应handlers中声明的名称
#指定处理器类,该类以时间为基础进行日志转储
class=handlers.TimedRotatingFileHandler
formatter=detailFormatter
#handlers.TimedRotatingFileHandler的参数,意义在该类中说的很明确
args=('tools/logs/errors.log','D',1,5)
[formatter_simpleFormatter]#设置格式,simpleFormatter该格式的名称,对应formatters中声明的格式名称
#format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
#日志的具体格式,在logging.Formatter类中有具体说明
format=%(asctime)s - %(thread)d - line %(lineno)d - in module: %(module)s, funcName:%(funcName)s - %(levelname)s : %(message)s
#日期格式,在logging.Formatter类中有具体说明
datefmt=%Y-%m-%d %H:%M:%S
[formatter_detailFormatter]#设置格式,detailFormatter该格式的名称,对应formatters中声明的格式名称
#format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
format=%(asctime)s -File "%(pathname)s", line %(lineno)d, in %(funcName)s - %(levelname)s : %(message)s
datefmt=%Y-%m-%d %H:%M:%S
说明:以上属于个人配置,可以自行配置
二、使用
class LoggerConfig:
def __init__(self):
'''
完成配置文件的加载和初始化
'''
# 以时间为转储标准转储log日志到文件error.log,级别waning
self.logger_error = self.logger_load(logger_name='timeFileLogger',path='logger.ini')
# 以文件大小为转储标准转储log日志到文件access.log,级别DEBUG
self.logger_access = self.logger_load(logger_name='rotatingFileLogger',path='logger.ini')
# 仅仅控制台或者终端输出
self.console = self.logger_load(path='logger.ini')
def logger_load(self,path,logger_name=''):
'''
加载log日志配置文件
:param logger_name: logger名字,默认root
:return: Logger对象
'''
config.fileConfig(path)
return logging.getLogger(logger_name)
#单例
logger_config = LoggerConfig()
console = logger_config.console
access = logger_config.logger_access
error = logger_config.logger_error
说明:需要配合logging的级别函数使用,比如warning():
try:
self.driver.get(url)#获取路径
except Exception as e:
access.warning(e)