Python/Django:在runserver下打印日志到控制台,在Apache下打印日志到文件
我想知道在用 manage.py runserver
运行我的 Django 应用时,怎么能把调试信息发送到控制台(就像用 print
一样),而在用 Apache 运行应用时,又能把这些信息发送到一个日志文件里。
我查看了 Django 的日志记录,虽然我对它的灵活性和可配置性印象深刻,但对于我这个简单的需求,还是搞不清楚该怎么做。
6 个回答
29
你可以在你的 settings.py
文件里设置日志记录。
这里有一个例子:
if DEBUG:
# will output to your console
logging.basicConfig(
level = logging.DEBUG,
format = '%(asctime)s %(levelname)s %(message)s',
)
else:
# will output to logging file
logging.basicConfig(
level = logging.DEBUG,
format = '%(asctime)s %(levelname)s %(message)s',
filename = '/my_log_file.log',
filemode = 'a'
)
不过,这个设置是依赖于 DEBUG 的状态,也就是说你可能不想一直担心这个设置。想了解更好的写法,可以看看这个链接:如何判断我的 Django 应用是否在开发服务器上运行?。补充一下,上面的例子是来自 Django 1.1 的项目,自那以后,Django 的日志配置有了一些变化。
109
这里有一个基于Django的日志记录解决方案。它使用的是DEBUG设置,而不是实际检查你是否在运行开发服务器。不过,如果你找到更好的方法来检查这一点,调整起来应该也很简单。
LOGGING = {
'version': 1,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/path/to/your/file.log',
'formatter': 'simple'
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
}
}
if DEBUG:
# make all loggers use the console.
for logger in LOGGING['loggers']:
LOGGING['loggers'][logger]['handlers'] = ['console']
想了解更多细节,可以查看 https://docs.djangoproject.com/en/dev/topics/logging/。
92
当你在使用mod_wsgi运行程序时,打印到stderr的文本会出现在httpd的错误日志中。你可以直接使用print
,或者选择使用logging
来记录信息。
python 3:
print("Goodbye cruel world!", file=sys.stderr)
python 2:
print >>sys.stderr, 'Goodbye, cruel world!'