python - Django 记录器在级别 : error and info 之间混合

标签 python django logging django-settings django-logging

我正在尝试将日志记录添加到我的 django 项目中 这是我的记录器配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s',
        },
    },
    'handlers': {
        'default': {
            'class': 'logging.FileHandler',
            'filename': os.path.join(*[BASE_DIR, 'logfiles', 'debug.log']),
            'formatter': 'standard',
        },
        'apps_errors': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': os.path.join(*[BASE_DIR, 'logfiles', 'apps_errors.log']),
            'formatter': 'standard',
        },
        'dev_logger': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': os.path.join(*[BASE_DIR, 'logfiles', 'apps_logs.log']),
            'formatter': 'standard',
        },
    },
    'loggers': {
        '': {
            'handlers': ['default'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'gui': {
            'handlers': ['dev_logger', 'apps_errors'],
            'propagate': True,
        },
        'crawler': {
            'handlers': ['dev_logger', 'apps_errors'],
            'propagate': True,
        },
    },
}

如您所见,我想将所有内容记录到 debug.log
并将应用程序(爬虫和 GUI)上的错误记录到 apps_errors.log
并将应用程序(爬虫和 GUI)的信息记录到 apps_logs.log

debug.log 和 apps_errors.log 工作正常,所有内容都被记录到 debug.log 中,只有我的 2 个应用程序中的错误被记录到 apps_errors.log 中>,但是当涉及 apps_logs.log 时,我不断收到错误和信息,而它应该只是信息

顺便说一句,当我想记录我正在做的事情时

import logging
logger = logging.getLogger(__name__)

有关我正在做的信息:logging.info(my_info)

对于我正在做的错误:logging.exception(my_exception)我也尝试了logging.error(my_exception)

PS:
我尝试定义两个记录器,每个处理程序一个,但这样做仅使用错误记录器/处理程序记录错误,信息记录器不起作用

'gui': {
        'handlers': ['dev_logger'],
        'level': 'INFO',
        'propagate': True,
},
'gui': {
        'handlers': ['apps_errors'],
        'level': 'ERROR',
        'propagate': True,

最佳答案

如果由于某种原因您希望 INFO 消息显示在处理程序的输出中,但没有更高严重性的消息,则需要将过滤器附加到该处理程序。这不是一个常见的要求 - 尽管在日志中隔离错误和更大的错误很常见,但仅隔离 INFO 消息并不常见。使用过滤器应该可以:

import logging

class InfoFilter(logging.Filter):
    def filter(self, record):
        return record.level == logging.INFO

然后将该过滤器分配给您的处理程序dev_logger。不确定为什么您将其称为 dev_logger - 也许您需要回顾一下您对记录器和处理程序的理解。顶部advanced tutorial给出一个总结。

关于python - Django 记录器在级别 : error and info 之间混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52234074/

相关文章:

python - 如何填充matplotlib中线之间的区域

python - 用python生成sql文件(对于mysql)

python - Pandas DataFrame.to_csv() OSError : [Errno 22] Invalid argument and PermissionError: [Errno 13] Permission denied

python - Ctypes 返回错误的结果

python - Django: "Object is not iterable",当尝试修改所述对象时

django - 从 django.db 导入 utils 导入错误 : cannot import name utils

python - 向 Django QuerySet 添加值

JAVA SimpleFormatter,无法设置正则表达式

azure 函数logError慢

tomcat - 如何登录jar库的静态 block