如何配置Django logger实现每24小时生成日期命名的独立日志文件
Django 按天切割日志配置调整方案
你需要将原配置中的普通FileHandler替换为Python logging模块内置的TimedRotatingFileHandler,该处理器原生支持按时间周期自动切割日志,调整后的完整配置如下:
import os # 提前创建logs目录避免启动报错 LOGS_DIR = './logs' if not os.path.exists(LOGS_DIR): os.makedirs(LOGS_DIR) LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'simpleRe': { 'format': '[{levelname}] [{asctime}] [{module}] {process:d} {thread:d} {message}', 'style': '{', } }, 'handlers': { 'to_file': { 'level': 'DEBUG', # 替换为按时间切割的处理器 'class': 'logging.handlers.TimedRotatingFileHandler', # 基础文件名,后续会自动拼接日期后缀 'filename': os.path.join(LOGS_DIR, 'debug'), 'formatter': 'simpleRe', # 切割单位:D代表天 'when': 'D', # 切割间隔:每1天切割一次,对应24小时周期 'interval': 1, # 历史日志保留天数,设为0则不限制保留数量 'backupCount': 30, # 自定义文件名后缀,对应格式为_日月年.log,符合需求的debug_26102021.log格式 'suffix': '_%d%m%Y.log', # 匹配自定义后缀的正则,保证旧日志自动清理功能正常 'extMatch': r'^_\d{2}\d{2}\d{4}\.log$', # 避免日志写入中文出现乱码 'encoding': 'utf-8' }, }, 'loggers': { 'django': { 'handlers': ['to_file'], 'level': 'DEBUG', 'propagate': True, } }, }
关键参数说明
when:时间切割单位,可选值包括S(秒)、M(分钟)、H(小时)、D(天)、W0-W6(每周周几),这里配置为D即按天切割interval:切割周期,和when配合使用,值为1代表每1个时间单位切割一次,对应需求的每24小时生成一个新日志文件suffix:日志文件后缀模板,_%d%m%Y.log正好匹配你需要的debug_26102021.log命名格式backupCount:历史日志保留上限,比如配置为30就会自动清理30天之前的旧日志,不需要限制可设为0extMatch:匹配自定义日志后缀的正则表达式,用来识别历史日志文件,保证backupCount配置的自动清理旧日志功能正常生效
内容的提问来源于stack exchange,提问作者nerd_geek365
相关产品推荐
相关产品推荐

