为什么Django日志记录会跳过日志条目?

Tej*_*ddy 21 django django-logging

这是我的设置模块:

LOGGING = {
  'version': 1,
  'disable_existing_loggers': False,
  'handlers': {
    'file': {
        'level': 'DEBUG',
        'class': 'logging.FileHandler',
        'filename': '/django-python/django/testapp/testapp.log',
    },
  },
  'loggers': {
    'django': {
        'handlers': ['file'],
        'level': 'DEBUG',
        'propagate': True,
    },
  },
}
Run Code Online (Sandbox Code Playgroud)

这是我在视图文件中的代码:

import logging
logger = logging.getLogger(__name__)
logger.info("this is an error message!!")
Run Code Online (Sandbox Code Playgroud)

我从各种模块获取以前的日志,但不是上面的日志条目"这是一条错误消息".

sol*_*oke 34

您的日志记录配置仅捕获django命名空间中的日志.

这一行:

logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)

...告诉记录器使用模块的名称作为这些日志(docs)的命名空间.如果调用了您的模块mymodule,那么您可以通过在日志记录配置中添加以下内容来捕获这些日志:

'loggers': {
   'django' : {...},
   'mymodule': {
        'handlers': ['file'],
        'level': 'DEBUG',
        'propagate': True,
    },
},
Run Code Online (Sandbox Code Playgroud)

  • 只是在这里添加一点,如果你将这个日志代码放在用户模块的视图中,`__name__`将输出`users.view`.因此,使用上面的solarissmoke示例,您可以将`mymodule`更改为`users.view` (4认同)

m.a*_*icz 10

您应该根据您的应用程序名称添加记录器配置 - 类似于

    'your_app_name': {
        'handlers': ['file'],
        'level': 'DEBUG',
        'propagate': True,
    },
Run Code Online (Sandbox Code Playgroud)

到目前为止,您只声明了django默认消息的记录器(如系统错误)


请注意,记录器消息的级别非常重要,因此在您使用时

    logger.info("this is an error message!!")
Run Code Online (Sandbox Code Playgroud)

打印消息的方法您的记录器级别应该是INFO或更严格


and*_*rey 6

您可以将“全部捕获”记录器添加到“记录器”部分:

'loggers': {
    '': {
        'handlers': ['file'],
        'level': 'DEBUG',
    }
}
Run Code Online (Sandbox Code Playgroud)

它将捕获Django默认记录器未捕获的所有日志消息。