django 按日期切分日志如何控制后缀

django 配置全局日志logging按日期切分后生成带日期后缀名称的日志,但全局配置又无法使用suffix参数。该怎么获取info.日期.log格式的日志文件

img

img

img

可以定义个LOGGER_CONFIG, 然后在settings.py里指定就可以了
LOGGER_CONFIG定义:

LOGGER_CONFIG = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "form01": {
            "format": "%(asctime)s [%(levelname)s] %(name)s: %(message)s",
            "datefmt": "%Y/%m/%d %H:%M:%S %z",
        }
    },
    "handlers": {
        "file": {
            "class": "logging.handlers.TimedRotatingFileHandler",
            "level": "INFO",
            "formatter": "form01",
            "when": "midnight",
            "interval": 1,
            "backupCount": 30,
            "encoding": "utf-8",
            "suffix": "%Y-%m-%d",
            "filename": "os.path.join(BASE_DIR, info_file_name)",
        },
    },
    "loggers": {
        "root": {"level": "INFO", "handlers": ["file"]},
        "django": {"level": "INFO", "handlers": ["file"]},
    },
}

settings.py

LOGGING = LOGGER_CONFIG

细节你自己调一下试试。

可以使用suffix参数来设置日期后缀名称。

import os
import time
from logging.handlers import TimedRotatingFileHandler

info_file_name = 'logs/info.log'

file_handler = TimedRotatingFileHandler(
    filename=os.path.join(BASE_DIR, info_file_name),
    when='midnight',
    interval=1,
    backupCount=30,
    encoding='utf-8',
    suffix='%Y-%m-%d'
)
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(name)s: %(message)s'))

logger = logging.getLogger()
logger.addHandler(file_handler)

这样,将会生成以日期为后缀的日志文件,例如:info.2023-02-08.log。