无法从Django日志中解析“错误的文件描述符”

2024-05-15 21:57:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Papertrail日志添加到Django应用程序中,该应用程序是与旧的Falcon应用程序一起构建的。由于v1到v2的一些转换,它的设置是这样的(为了简单起见,删除了很多代码):

import logging
import logging.config

logger = logging.getLogger('api')

...

logging.config.dictConfig({
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
        'logstash': {
            'level': 'INFO',
            'class': 'logstash.TCPLogstashHandler',
            'host': LOGSTASH_HOST,
            'port': LOGSTASH_PORT,
            'version': 1,
            'message_type': 'django',
            'fqdn': True,
        },
        {
            'level': 'INFO',
            'class': 'logging.handlers.SysLogHandler',
            'address': ('logs.papertrailapp.com', int(CREDENTIALS_PAPERTRAIL_ADDRESS))
        }
    }
    'loggers': {
        'api': {
            'handlers': ['console','SysLog'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
            'propagate': True,
        },
        "gunicorn.error": {
            'handlers': ['console','SysLog'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
            'propagate': True,
        },
        "gunicorn.access": { 
            'handlers': ['console','SysLog'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
            'propagate': True,
        },
        'access_logs': {
            'handlers': ['logstash'],
            'level': 'INFO',
            'propagate': False,
        },
    },
})

gunicorn的东西来自https://github.com/benoitc/gunicorn/issues/2016

在一个测试文件中,我有logger.warning('test asdf'),我看到它被吐到控制台,但是它也抛出:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/logging/handlers.py", line 940, in emit
    self.socket.sendto(msg, self.address)
OSError: [Errno 9] Bad file descriptor

问题是,访问日志的东西是有效的;我们看到这些东西被藏起来了,但我似乎无法解决这个插座问题。格式也直接来自他们的文档


Tags: djangoinfotrue应用程序oslogginghandlerslevel