开发者可以通过三种方式配置日志记录:
- 调用配置方法的Python代码显式创建记录器、处理程序和格式化程序。
- 创建日志配置文件并使用
fileConfig()
函数读取。 - 创建配置信息字典并将其传递给
dictConfig()
函数。
相对第一种,第二种使用配置文件方式更有优势,主要是配置和代码的分离,结构上更清晰,以及非开发者轻松修改日志记录属性的能力。本文将介绍第二种使用配置文件方式记录Python程序日志,将Python程序日志分别打印到控制台和日志文件,日志文件按时间戳滚动迭代,且可以自动删除过期文件。
正文
首先创建配置文件logging.conf
,以下是文件内容。这里主要介绍TimedRotatingFileHandler
的配置参数args
,第一个参数/var/log/demo3/example.log
表示日志输出的文件目录,第二个参数d
表示以天为单位迭代日志文件,第三个参数1
表示每隔1个周期,第二个参数和第三个参数相乘表示每隔几个周期迭代一个日志文件,第四个参数3
表示仅保留三个日志文件,超过该值的日志文件会被自动清除。
[loggers]
keys=root
[handlers]
keys=consoleHandler,timedRotatingFileHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=INFO
handlers=consoleHandler,timedRotatingFileHandler
[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=simpleFormatter
args=(sys.stdout,)
[handler_timedRotatingFileHandler]
class=handlers.TimedRotatingFileHandler
level=INFO
formatter=simpleFormatter
args=('/var/log/demo3/example.log','d',1,3)
[formatter_simpleFormatter]
format=%(asctime)s %(name)s %(levelname)s - %(message)s
datefmt=
编写Python程序,使用fileConfig()
函数读取配置文件,测试打印各种类型的日志。可以看出使用配置文件的方式打印日志,程序结构很清晰。
import logging.config
logging.config.fileConfig('logging.conf')
# create logger
logger = logging.getLogger()
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
运行Python程序,控制台和日志文件输出以下内容:
2020-11-03 20:50:49,434 simple_example.py INFO - info message
2020-11-03 20:50:49,435 simple_example.py WARNING - warn message
2020-11-03 20:50:49,435 simple_example.py ERROR - error message
2020-11-03 20:50:49,435 simple_example.py CRITICAL - critical message
参考资料
https://docs.python.org/zh-cn/3/howto/logging.html#logging-advanced-tutorial 进阶日志教程