栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django的logger配置的一些疑惑

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django的logger配置的一些疑惑

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,  # 是否禁用已经存在的日至实例(diango自带的报错),一般不禁用
    'formatters': {  # 定义输出日志的格式
        'standard': {  # 格式名字可以随意定义
            'format': '[%(levelname)s][%(asctime)s][%(filename)s][%(funcName)s][%(lineno)d] > %(message)s'
            # 定义信息格式,自己随便定义,都有什么内容查看下边内容
        },
        'simple': {
            'format': '[%(levelname)s]> %(message)s'
        },
    },
    'filters': {
        'require_debug_true': {  # 只有在settings中的debug=True的时候才会生效
            '()': 'django.utils.log.RequireDebugTrue',  # 指定过滤器但是不知道是干什么的没研究明白
        },
    },
    'handlers': {  # 都叫这个为控制器,控制是什么样的记录方式等的一些参数
        'default': {
            'level': 'DEBUG',  # 日志级别
            'class': 'logging.handlers.RotatingFileHandler',  # 定义日志的切分格式,以及输出方式
            'filename': os.path.join(LOGS_DIR, 'django.log'),  # 日志文件,请确保修改'filename'路径为运行Django应用的用户有权限写入的一个位置
            'maxBytes': 1024 * 1024 * 5,  # 5 MB 文件大小
            'backupCount': 60,  # 备份份数
            'formatter': 'standard',  # 使用哪种日志格式
        },
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',  # 输出到控制台,这个类指定的不同输出方式不一样,下边是这个地方指定的类所需要的参数
            'formatter': 'simple'
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            # 参照https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler
            # 目前设定每天一个日志文件
            'filename': os.path.join(LOGS_DIR, 'everyday.log'),
            'when': 'midnight',
            'interval': 1,
            'backupCount': 60,
            'formatter': 'standard'
        },
    },
    'loggers': {  # 都叫这个容器,配置上容器内使用什么控制器记录日志,后边实例化时getLogger内写的就是这个里面的某个容器名
        'django': {
            'handlers': ['default', 'console'],
            'level': 'INFO',
           'propagate': True,
        },
        'django.everyday': {
            'handlers': ['file', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

这个是我很常用的一个django的logger的配置。
之前一直很奇怪为什么日志时有时无,今天发现了一些门道,简单记录一下。

上面的配置都好理解,所以咱们直接看loggers这里。

'loggers': {
        'django': {
            'handlers': ['default', 'console'],
            'level': 'INFO',
           'propagate': True,
        },
        'django.everyday': {
            'handlers': ['file', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }

以前我在view文件里面会先调用getLogger代码来获取一个logger

logger = logging.getLogger("django.everyday")

但是我发现很多信息都只有在django.log里面才有everyday.log里面的日志信息总是很少。

今天测试一下才发现

①系统自带的一些日志信息会自动输出在django这个logger里面,所以如果你想看到系统记录的日志信息你就必须注册这个logger。
②everyday.log文件里面只会记录我通过调用logger输出的日志。
③虽然我注册的是django.everyday,但日志一样会输入到django这个logger里面去。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/969267.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号