Django:无法配置处理程序 'syslog'
Django: Unable to configure handler 'syslog'
我从 django 项目制作 docker 图像,它开始产生我以前从未遇到过的错误。该错误似乎与日志记录有关,特别是系统日志。起初,我认为 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
,但似乎这不是问题所在。
第一个问题是你的文件系统中没有 /dev/log
(/dev
通常作为 tmpfs
安装,而不是作为驱动器支持的 FS)。
下一个问题是 SysLogHandler
(logging.handlers.SysLogHandler
) 要求 address
是 UNIX 域套接字,而不是其他任何东西。因此,您需要创建一个 UNIX 套接字 /dev/log
并在 Django SysLogHandler
.
中传递地址
您可以通过 nc
(netcat
) 创建一个 UNIX 域 sokcet,如果您的版本支持 -U
选项:
nc -lU /dev/log
或者您可以直接在 Python 中创建套接字,将地址族作为 AF_UNIX
:
import sokcet
sock = socket.socket(socket.AF_UNIX)
sock.bind('/dev/log')
创建容器时,上述任何一项都可以作为 Dockerfile
/docker-compose.yml
中的命令。
我从 django 项目制作 docker 图像,它开始产生我以前从未遇到过的错误。该错误似乎与日志记录有关,特别是系统日志。起初,我认为 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
,但似乎这不是问题所在。
第一个问题是你的文件系统中没有 /dev/log
(/dev
通常作为 tmpfs
安装,而不是作为驱动器支持的 FS)。
下一个问题是 SysLogHandler
(logging.handlers.SysLogHandler
) 要求 address
是 UNIX 域套接字,而不是其他任何东西。因此,您需要创建一个 UNIX 套接字 /dev/log
并在 Django SysLogHandler
.
您可以通过 nc
(netcat
) 创建一个 UNIX 域 sokcet,如果您的版本支持 -U
选项:
nc -lU /dev/log
或者您可以直接在 Python 中创建套接字,将地址族作为 AF_UNIX
:
import sokcet
sock = socket.socket(socket.AF_UNIX)
sock.bind('/dev/log')
创建容器时,上述任何一项都可以作为 Dockerfile
/docker-compose.yml
中的命令。