Django:无法配置处理程序'syslog'

问题描述 投票:1回答:1

我从django项目制作docker映像,它开始产生我从未有过的错误。该错误似乎与日志记录有关,特别是与syslog有关。起初,我认为docker映像中缺少/dev/log会导致错误。所以我在docker文件中添加了一行来创建/dev/文件夹和log文件。但是,错误没有消失。

这是错误日志。

 File "/usr/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 228, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 116, in inner_run
autoreload.raise_last_exception()
File "/usr/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 251, in raise_last_exception
six.reraise(*_exception)
File "/usr/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 228, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/django/__init__.py", line 22, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/usr/local/lib/python2.7/site-packages/django/utils/log.py", line 75, in configure_logging
logging_config_func(logging_settings)
File "/usr/local/lib/python2.7/logging/config.py", line 794, in dictConfig
dictConfigClass(config).configure()
File "/usr/local/lib/python2.7/logging/config.py", line 576, in configure
'%r: %s' % (name, e))
ValueError: Unable to configure handler 'syslog': [Errno 2] No such file or directory

这是与日志记录相关的设置。

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
    'mail_admins': {
        'level': 'ERROR',
        'class': 'django.utils.log.AdminEmailHandler'
    },
    'syslog': {
        'level': 'DEBUG',
        'class': 'logging.handlers.SysLogHandler',
        'facility': 'user',
        'address': '/dev/log',
    },
    'null': {
        'level': 'DEBUG',
        'class': 'logging.NullHandler',
    },
    'stream': {
        'level': 'INFO',
        'class': 'logging.StreamHandler'
    },
},
'loggers': {
    'root': {
        'handlers': ['syslog', 'mail_admins'],
        'level': 'ERROR',
    },
    'SocialAuth': {
        'handlers': ['mail_admins'],
        'level': 'WARN',
    },
    'django': {
        'handlers': ['syslog', 'mail_admins'],
        'level': 'ERROR',
    },
 }

我创建了文件夹和路径/dev/log,但似乎不是问题。

python django syslog
1个回答
1
投票

第一个问题是您的文件系统中没有/dev/log/dev通常作为tmpfs而不是作为驱动器支持的FS装载。

并且下一个问题是SysLogHandlerlogging.handlers.SysLogHandler)要求address是UNIX域套接字,而不是其他任何套接字。因此,您需要创建一个UNIX套接字/dev/log,并在Django SysLogHandler中传递地址。


如果您的版本支持nc选项,则可以通过netcat-U)创建UNIX域目录:

nc -lU /dev/log

或者您可以直接在Python中创建套接字创建,将地址族称为AF_UNIX

import sokcet

sock = socket.socket(socket.AF_UNIX)
sock.bind('/dev/log')

并且以上任何一项都可以在创建容器时作为命令在Dockerfile / docker-compose.yml中使用。

© www.soinside.com 2019 - 2024. All rights reserved.