Django 记录器在级别之间混合:错误和信息
Django logger is mixing between levels: error and info
我正在尝试将日志记录添加到我的 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
并将应用程序(爬虫和图形用户界面)上的错误记录到 apps_errors.log
并将应用程序(爬虫和图形用户界面)的信息记录到 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:
我已经尝试定义两个记录器,每个处理程序一个,但是这样做只记录使用错误 logger/handler 的错误,信息一个不起作用
'gui': {
'handlers': ['dev_logger'],
'level': 'INFO',
'propagate': True,
},
'gui': {
'handlers': ['apps_errors'],
'level': 'ERROR',
'propagate': True,
如果出于某种原因您只希望 INFO 消息显示在处理程序的输出中,但没有更严重的消息,则您需要将过滤器附加到该处理程序。这不是一个常见的要求 - 虽然隔离错误和日志中的错误很常见,但隔离 only INFO 消息并不常见。使用过滤器应该有效:
import logging
class InfoFilter(logging.Filter):
def filter(self, record):
return record.level == logging.INFO
然后将该过滤器分配给您的处理程序 dev_logger
。不确定为什么将其命名为 dev_logger
- 也许您需要回顾一下您对记录器和处理程序的理解。最上面的advanced tutorial给出了总结。
我正在尝试将日志记录添加到我的 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
并将应用程序(爬虫和图形用户界面)上的错误记录到 apps_errors.log
并将应用程序(爬虫和图形用户界面)的信息记录到 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:
我已经尝试定义两个记录器,每个处理程序一个,但是这样做只记录使用错误 logger/handler 的错误,信息一个不起作用
'gui': {
'handlers': ['dev_logger'],
'level': 'INFO',
'propagate': True,
},
'gui': {
'handlers': ['apps_errors'],
'level': 'ERROR',
'propagate': True,
如果出于某种原因您只希望 INFO 消息显示在处理程序的输出中,但没有更严重的消息,则您需要将过滤器附加到该处理程序。这不是一个常见的要求 - 虽然隔离错误和日志中的错误很常见,但隔离 only INFO 消息并不常见。使用过滤器应该有效:
import logging
class InfoFilter(logging.Filter):
def filter(self, record):
return record.level == logging.INFO
然后将该过滤器分配给您的处理程序 dev_logger
。不确定为什么将其命名为 dev_logger
- 也许您需要回顾一下您对记录器和处理程序的理解。最上面的advanced tutorial给出了总结。