Django logging - ValueError: 'NoneType' object has no attribute 'split'

Django logging - ValueError: 'NoneType' object has no attribute 'split'

我正在尝试在使用 Django 的应用程序中配置一些日志记录,最终将记录几种不同类型的信息以分隔日志文件(例如 运行 一个模块所花费的时间,不同模块的标记分类流量等)。

应用程序正在部署到 VirtualBox Ubuntu 16.04 环境。

现在,我只是想将一些简单的测试信息记录到名为 eems-dashboard.log 的文件(我创建的文件是空的,似乎具有完全访问权限)中,只是为了尝试让日志记录最初工作。 settings.py 中的设置如下所示:

LOGGING = {
   'version': 1,
   'disable_existing_loggers': False,
   'formatters': {
       'verbose': {
           'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
       },
   },
   'handlers': {
       'console': {
           'level': 'DEBUG',
           'class': 'logging.StreamHandler',
           'formatter': 'verbose'
       },
       'log_file':{
            'level': 'DEBUG',
            'filename': '/var/log/eems-dashboard.log',
            'formatter': 'verbose'
        }
   },
   'loggers': {
       '': {
           'handlers': ['log_file'],
           'level': 'DEBUG',
       },
       'django.request': {
           'handlers': ['log_file'],
           'propagate': True,
           'level': 'DEBUG'
       },
       'apps': {
            'handlers': ['log_file'],
            'level': 'DEBUG',
            'propagate': True,
        }
   }
}

但是,每当我尝试 运行 本地部署此应用程序时,我都会收到以下错误:

    Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/webapps/uiux/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/webapps/uiux/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 338, in execute
    django.setup()
  File "/webapps/uiux/env/lib/python3.5/site-packages/django/__init__.py", line 22, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/webapps/uiux/env/lib/python3.5/site-packages/django/utils/log.py", line 75, in configure_logging
    logging_config_func(logging_settings)
  File "/usr/lib/python3.5/logging/config.py", line 795, in dictConfig
    dictConfigClass(config).configure()
  File "/usr/lib/python3.5/logging/config.py", line 566, in configure
    '%r: %s' % (name, e))
ValueError: Unable to configure handler 'log_file': 'NoneType' object has no attribute 'split'

我找到了一些关于此错误的有限信息,但 none 的解决方案似乎适用于手头的问题。我已授予对日志文件的文件路径的完全权限,但这就是我能够找到的所有故障排除建议。我很确定它与 LOGGING 配置的语法有关,而不是错误中出现的任何其他模块的问题。一般来说,我对 programming/developing 非常陌生。谢谢。

您需要为 log_file 处理程序指定 class。我深入研究了 Python 的 logging/config.py 模块,它试图在给定配置中找到一个 class 键,然后再调用 split() 键。由于您没有在 log_file 字典中指定 class 键,它将尝试在 None.

上调用 split()

例如

'log_file':{ 'level': 'DEBUG', 'filename': '/var/log/eems-dashboard.log', 'formatter': 'verbose', 'class': 'logging.handlers.SysLogHandler' }

查看文档以了解适合您的日志记录处理程序。

https://docs.python.org/2/library/logging.handlers.html