Django造纸记录神秘地失败了



我已经为django项目设置了造纸图,但是用 OSError: [Errno 9] Bad file descriptor设置了记录失败。很奇怪的是,如果我在登录调用之前致电django.setup(),它有效...

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'json': {
            '()': 'pythonjsonlogger.jsonlogger.JsonFormatter',
             'fmt': '%(levelname)s %(asctime)s %(message)s',
         },
    },
    'handlers': {
        'papertrail': {
            'level': 'DEBUG',
            'class': 'logging.handlers.SysLogHandler',
            'formatter': 'json',
            'address': ('logsN.papertrailapp.com', 12345)
         },
    ...
    },
    'loggers': {
        'papertrail': {
            'handlers': ['papertrail'],
            'level': 'ERROR',
            'propagate': True,
         },
    ...

/management/commands/logging_test.py

from django.core.management import BaseCommand
import django
import logging
#  uncomment this line to make it work
#django.setup()

def test_logging():
    logger = logging.getLogger('papertrail')
    logger.error(
        'TEST LOGGING'
    )

class Command(BaseCommand):
    def handle(self, *args, **options):
        test_logging()

我可以使用以下方式调用test_logging函数:

./manage.py test_logging

如果我删除行django.setup(),则可以使用。我不知道为什么。

请查看django.setup()的文档,您会发现此功能的主要角色之一是根据您的设置设置记录。它提到了使用django.setup()的情况来使用日志记录:

需要使用django.setup():

如果您使用的是django"独立"的组件,例如 编写一个加载一些Django模板和渲染的Python脚本 它们,或使用ORM获取一些数据 - 还有一个步骤 除了配置设置外,您还需要。

我无法说出您的项目的作用,但是您正在进行的测试似乎属于"独立"类别。

查看源django.setup()部分呼叫以下

configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)

和该函数的来源可执行以下操作:

def configure_logging(logging_config, logging_settings):
    if logging_config:
        # First find the logging configuration function ...
        logging_config_func = import_string(logging_config)
        logging.config.dictConfig(DEFAULT_LOGGING)
        # ... then invoke it with the logging settings
        if logging_settings:
            logging_config_func(logging_settings)

相关内容

  • 没有找到相关文章

最新更新