Django配置logging模块

/ 0评 / 0
LOGGING = {
    'version': 1,  # 保留的参数,默认是1
    'disable_existing_loggers': False,  # 是否禁用已经存在的logger示例,不禁用
    'formatters': {
        'standard': {  # 定义一个标准的日志格式化
            'format': '%(process)s %(thread)d %(levelname)s %(asctime)s %(pathname)s %(module)s %(funcName)s %(lineno)d: %(message)s'
        },
        'error': {
            'format': '%(process)s %(thread)d %(levelname)s %(asctime)s %(pathname)s %(module)s %(funcName)s %(lineno)d: %(message)s'
        }
    },
    # 过滤器
    'filters': {
        # 只有在deubg=True的过滤器
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    # 处理器
    'handlers': {
        'django_info': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(LOG_DIR, "info.log"),  # 日志文件
            # 'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 14,
            'when': 'MIDNIGHT',
            'formatter': 'standard',
            'encoding': 'utf-8'
        },
        'django_warn': {
            'level': 'WARN',
            'class': 'logging.handlers.TimedRotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(LOG_DIR, "warning.log"),  # 日志文件
            'backupCount': 14,
            'when': 'MIDNIGHT',
            'formatter': 'standard',
            'encoding': 'utf-8'
        },
        'django_error': {
            'level': 'ERROR',
            'class': 'logging.handlers.TimedRotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(LOG_DIR, "error.log"),  # 日志文件
            # 'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 14,
            'when': 'MIDNIGHT',
            'formatter': 'standard',
            'encoding': 'utf-8'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['django_info', 'django_warn', 'django_error'],
            'level': 'INFO'
        },
    },
}

使用logging模块的logger,handler,formatter和filter组件,在settings.py文件中增加LOGGING配置,django框架进行配置自动处理。

TimedRotatingFileHandler是创建固定时间间隔的日志。

参数解释:

filename 是输出日志的文件名称前缀,比如说 testServiceLog 这样的就是日志文件名前缀

when 是一个字符串,定义了日志切分的间隔时间单位,这是一个枚举类,可选参数如下:
"S":Second 秒
"M":Minutes 分钟
"H":Hour 小时
"D":Days 天
"W":Week day(0 = Monday)
"midnight":Roll over at midnight

interval 是间隔时间单位的个数,指等待多少个 when 的时间后 Logger 会自动重建新闻继续进行日志记录
这里需要注意的一点是,如果创建的文件和已有文件存在重名的情况,则会对历史的文件进行覆盖操作,所以使用好 suffix 避免文件名称重复

backupCount 是保留日志的文件个数
默认的参数是0,这种设置下是不会自动删除文件的。如果设置为 N(正整数),则会在创建新的日志文件时会检查日志文件个数是否到达 N,达到了的话就会从最先创建的开始删除,从而达到维持日志文件个数为 N 个的目标

总结:django框架配置的logging模块使用很方便,输出日志只需要获取logger实例,即可进行日志记录。TimedRotatingFileHandler能针对日志文件自动进行滚动记录,方便日志的回溯。参考:https://blog.csdn.net/weixin_36273267/article/details/105291465