【问题标题】:Django logging - ValueError: 'NoneType' object has no attribute 'split'Django 日志记录-ValueError:'NoneType' 对象没有属性'split'
【发布时间】:2019-01-15 03:14:27
【问题描述】:

我正在尝试在使用 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'

我发现了一些关于此错误的有限信息,但似乎没有一个解决方案适用于手头的问题。我已经允许对日志文件的文件路径具有完全权限,但这就是我能找到的所有故障排除建议。我很确定这与 LOGGING 配置的语法有关,而不是与错误中出现的任何其他模块有关。我对一般情况下的编程/开发非常陌生。谢谢。

【问题讨论】:

  • 为什么你的第一个记录器是空字符串?
  • @Saeed 我不相信空字符串会很重要。有问题的处理程序是'log_file'

标签: django linux ubuntu logging virtualbox


【解决方案1】:

您需要为log_file 处理程序指定一个类。我深入研究了 Python 的 logging/config.py 模块,它尝试在给定的配置中找到一个类键,然后在所述键上调用 split()。由于您没有在 log_file 字典中指定类键,因此它将尝试在 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

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多