在python中进行日志配置时,除了在 Python 代码显式创建日志器、处理器和格式器外,在实际项目中更多的是通过读取配置文件来完成日志配置的。
在python内置的logging.config
模块中,有两个常用的方法:fileConfig()
、dictConfig()
接下来将总结如何使用这两种方法进行日志配置
一、logging.config.fileConfig()
logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True, encoding=None)
该方法可以从符合ini格式的文件中读取日志配置(configparser — 配置文件解析器 — 受支持的 INI 文件结构)
fname
参数指定 文件名或文件类对象;
disable_existing_loggers
设置为True时(默认),表示将禁用任何现有的非根日志器,除非它们或它们的祖先在日志配置中被显式命名。设置为False时,表示在调用该方法时,不会禁用已有的日志器。
示例:
log.ini
[loggers]
keys=root,fileLogger,trFileLogger
[handlers]
keys=consoleHandler,fileHandler,trFileHandler
[formatters]
keys=consoleFormatter,fileFormatter
[logger_root]
;level=DEBUG
handlers=consoleHandler
[logger_fileLogger]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=fileLogger
propagate=0
[logger_trFileLogger]
level=INFO
handlers=consoleHandler,trFileHandler
qualname=trFileLogger
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=consoleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('./FH.log', 'a', 'utf8', True)
[handler_trFileHandler]
class=logging.handlers.TimedRotatingFileHandler
formatter=fileFormatter
kwargs={"filename":"./trFH.log","when":"S","interval":1,"backupCount":3,"delay":True}
[formatter_consoleFormatter]
format=[%(asctime)s - %(name)s] %(message)s
datefmt=%Y-%m-%d %H:%M:%S
[formatter_fileFormatter]
format=[%(asctime)s - %(name)s - %(filename)s:%(lineno)d] %(message)s
python代码读取日志配置文件,并记录日志:
import logging
import logging.config
# import logging.handlers
logging.config.fileConfig("./log.ini")
logger_r = logging.getLogger()
logger_f = logging.getLogger('fileLogger')
logger_ft = logging.getLogger('fileLogger.test')
logger_trf = logging.getLogger('trFileLogger')
logger_r.warning(logging.getLevelName(logger_r.getEffectiveLevel()))
logger_r.warning(logger_r.parent