这些Django日志消息在哪里消失?

时间:2014-01-10 05:35:06

标签: python django logging

我正在运行Django 1.54 shell:

% python ~/predictstat/manage.py shell
>>> import django
>>> django.get_version()
'1.5.4'

然后我设置了日志记录:

>>> import logging
>>> logger = logging.getLogger(__name__)

然后我会告诉你日志配置:

 >>> from django.conf import settings
 >>> settings.LOGGING
 {'handlers': {'file': {'level': 'DEBUG', 'interval': 1, 'when': 'midnight', 'filename': 'logs/myApp.log', 'formatter': 'verbose', 'class': 'logging.handlers.TimedRotatingFileHandler'}}, 'loggers': {'myApp': {'level': 'DEBUG', 'handlers': ['file']}, 'django': {'level': 'DEBUG', 'propagate': True, 'handlers': ['file']}}, 'version': 1, 'disable_existing_loggers': False, 'formatters': {'simple': {'format': '%(levelname)s %(message)s'}, 'verbose': {'datefmt': '%Y-%m-%d %H:%M:%S', 'format': '[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s'}}}

然后我打印一条日志消息:

>>> logger.info("Hello World")

但据我所知,此日志消息并未显示在任何文件中或其他任何位置。当然不在logs / myApp.log中。

有人能告诉我这些日志消息在哪里消失了吗?为什么这个日志记录不起作用?

3 个答案:

答案 0 :(得分:0)

它没有被任何处理程序处理,这就是为什么它没有被记录在任何地方。您的设置具有为定义的两个记录器定义的处理程序:myAppdjango

但是你得到一个名为__main__的记录器,它是shell中__name__的值。我建议尝试这些方法:

>>> logger = logging.getLogger("myApp")
>>> logger.info("My Test line")

现在您应该在日志文件中看到它。

答案 1 :(得分:0)

在python shell中__name__将评估为“ main ”,并且您没有为此名称配置记录器,也没有为根记录器配置任何配置。同样使用文件记录器,您应该使用绝对路径 - 但在潜在的多进程设置中使用文件记录器不是一个好主意。

答案 2 :(得分:-1)

首先致电logging.basicConfig

logging.basicConfig(filename='debug.log', level=logging.DEBUG)
log = logging.getLogger(__name__)
log.debug('Dig this, I\'m printing.')

有关更高级的示例,请参阅Logging Cookbook,其中显示了如何同时登录控制台和文件以及格式化记录器的输出,甚至是跨不同的模块。