gpt4 book ai didi

python - 将 INFO 记录到 Django 服务器的 STDOUT

转载 作者:太空狗 更新时间:2023-10-30 01:22:30 24 4
gpt4 key购买 nike

我正在 Django 服务器上设置日志记录。我希望能够将任意 INFO 级别的字符串记录到服务器的标准输出中,因此它与标准 Django 消息一起出现,如下所示:

[24/Feb/2014 20:37:03] "POST /v1/events/ HTTP/1.1" 201 0

这是我当前的日志记录配置:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
#'file': {
#'level': 'DEBUG',
#'class': 'logging.FileHandler',
#'filename': '/tmp/djdebug.log',
#},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'stream': sys.stdout
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'django': {
'handlers': ['console'],
'propogate': True,
'level': 'INFO'
}
#'django': {
#'handlers': ['file'],
#'propagate': True,
#'level': 'DEBUG',
#},
}
}

在我的 django 项目的应用程序的 models.py 文件中,我在顶部执行以下操作:

import logging
logger = logging.getLogger(__name__)

然后,在一些代码中,我编写运行以下命令:

logger.info('triggering notifications')

代码到达调用点,但没有任何内容写入服务器的标准输出。我错过了什么吗?我在本地运行它,并且 DEBUG = True,但我希望即使在 DEBUG = False 的生产中也能显示 INFO 消息。

最佳答案

__name__ 是包含记录器的 python 模块的名称。因此,为了使您的记录器工作,您应该将 settings.py 中的记录器从 django 重命名为您调用的模块的名称 getLogger .第二个选项 - 只需将 __name__ 更改为 django:

logger = logging.getLogger('django')

您评论的延迟更新:

Yeah, but I still want all of my loggers namespaced. I'm just wondering if there's a way to set a "base line" configuration for all modules and have everything automatically inherit from that. Using 'django' for everything is out of the question, totally unmodular.

您只需将 'your_project_name' 记录器添加到记录器列表。记录器名称的虚线路径定义了一个层次结构。例如,假设您需要项目中'some_application' 的文件日志和所有其他应用程序日志消息(INFO 级别)应该只进入控制台,那么您的记录器列表可能如下所示:

'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'django': {
'handlers': ['console'],
'propagate': True,
'level': 'INFO'
},

#...

'your_project_name': {
'handlers': ['console'],
'propagate': False,
'level': 'INFO',
},
'your_project_name.some_application': {
'handlers': ['file'],
'propagate': True, # propagate here to root project level
# logger to also print this message to console
'level': 'DEBUG',
},

#...

'your_project_name.some_application.models': {
'handlers': ['mail_admins'], #, 'console']
'propagate': True, # if file and console needed,
# but 'console' can be added to handlers
# and propagate set to False
# to avoid this log messages in file...
'level': 'ERROR',
},

}

some_application 中调用 logger = logging.getLogger(__name__) 将获得记录器,它应该将所有消息记录到文件并传播根项目记录器以在控制台上显示它们。所有其他应用程序模块 __name__ 将仅匹配您的根项目记录器:your_project_name 将仅在控制台上打印消息。如果需要,您可以在树中再添加一层,例如 your_project_name.some_application.models 可以使用 mail_admins 处理程序来报告一些数据库问题给管理员。当然,您可以更改层次结构中不同记录器的记录器级别!

关于python - 将 INFO 记录到 Django 服务器的 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21998567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com