25

这是我的设置模块:

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,
    },
  },
}

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

import logging
logger = logging.getLogger(__name__)
logger.info("this is an error message!!")

我从各种模块获取以前的日志,但没有上面的日志条目“这是一条错误消息”。

4

4 回答 4

37

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

这一行:

logger = logging.getLogger(__name__)

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

'loggers': {
   'django' : {...},
   'mymodule': {
        'handlers': ['file'],
        'level': 'DEBUG',
        'propagate': True,
    },
},
于 2016-04-12T11:05:45.500 回答
11

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

    'your_app_name': {
        'handlers': ['file'],
        'level': 'DEBUG',
        'propagate': True,
    },

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


请注意,记录器消息的级别很重要,因此当您使用

    logger.info("this is an error message!!")

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

于 2016-04-12T11:05:32.480 回答
10

您可以将“catch all”记录器添加到记录器部分:

'loggers': {
    '': {
        'handlers': ['file'],
        'level': 'DEBUG',
    }
}

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

于 2018-09-28T09:53:39.610 回答
2
import logging
logger = logging.getLogger(__name__)

添加后:

logging.basicConfig(
    level = logging.DEBUG,
    format = '%(name)s %(levelname)s %(message)s',
)

或者只是添加 settings.py :

import logging

    logging.basicConfig(
        level = logging.DEBUG,
        format = '%(name)s %(levelname)s %(message)s',
    )

我们可以将格式更改为:

format = '"%(levelname)s:%(name)s:%(message)s"  ',

或者

format = '%(name)s %(asctime)s %(levelname)s %(message)s',
于 2017-05-10T17:51:37.320 回答