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里面去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值