我正在运行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中。
有人能告诉我这些日志消息在哪里消失了吗?为什么这个日志记录不起作用?
答案 0 :(得分:0)
它没有被任何处理程序处理,这就是为什么它没有被记录在任何地方。您的设置具有为定义的两个记录器定义的处理程序:myApp
和django
。
但是你得到一个名为__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,其中显示了如何同时登录控制台和文件以及格式化记录器的输出,甚至是跨不同的模块。