我对服务器端app的开发还是没有入门的阶段,但是那啥,还是保持热情不是,于是乎今天特别想给自己的使用了Django的程序里加上日志(logging)。原因很简单,就是因为希望在Django提供的Debug页面的基础上,能够输出一些额外信息出来,也就是传说中的 printf 啦。。。
对了,其实我不太会用Python的各种高级的系统,比如logging system。。。比如logger, handler, formatter & filter。。。
但是Django的logging的documentation给出了一段简略的科普,已经基本够用了。但对于我来讲,唯独两个地方没有讲清楚:(1)如何配置logging;(2)如何使用logging。
嘛,貌似上面说的“基本够用”了,有点打脸了。
Bing了一下(别问我为何不Google一下,因为你懂的,这个时间段不要没事架梯子。),两个问题都解决了。首先,配置logging如同缘分注定一般,在settings.py文件里完成。这是我的直觉告诉我的,后来发现是正确的。直接在settings.py里添加配置信息,以下是从Django官方documentation上复制下来的代码。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/path/to/django/debug.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
这段配置代码里面最迷的就是名为 django 的logger。官方documentation貌似说本来就有默认的django的logger叫django。反正这里就明确配置了一个叫做django的logger。
然后是如何使用logger,这个也很迷。实际上我没有仔细看python的logging的documentation,最后是在如下网页上找到灵感的。
https://www.loggly.com/docs/django-logs/
也就是说,要想使用名为django的logger,需要首先获取这个名为django的logger。具体操作如下
# import the logging library
import logging
# Get an instance of a logger
logger = logging.getLogger(__name__)
def my_view(request, arg1, arg):
...
if bad_mojo:
# Log an error message
logger.error('Something went wrong!')
以上代码还是从
Django官方documentation上直接复制的。这里documentation上说使用__name__作为logger的名称有诸多好处,还可以用propagate功能。但是对于我们这个非常简化的logging系统来讲,完全不用__name__,明确用‘django’即可。这是获取到的就是刚刚配置过的名为django的logger了。后面就可以愉快地向日志文件输出了。