Jun*_*Kim 8 python django logging
我想在出现错误时登录 Django 和 Gunicorn。我用 Python 学习 TDD,http://chimera.labs.oreilly.com/books/1234000000754/ch17.html#_setting_up_logging
这是我的代码。/etc/init/gunicorn-superlists-staging.mysite.com.conf
description "Gunicorn server for superlists-staging.mysite.com"
start on net-device-up
stop on shutdown
respawn
setuid junsu
chdir /home/junsu/sites/superlists-staging.mysite.com/source
exec ../virtualenv/bin/gunicorn \
--bind unix:/tmp/superlists-staging.mysite.com.socket \
--access-logfile ../access.log \
--error-logfile ../error.log \
superlists.wsgi:application
Run Code Online (Sandbox Code Playgroud)
帐户/身份验证.py
import requests
import logging
from django.contrib.auth import get_user_model
User = get_user_model()
PERSONA_VERIFY_URL = 'https://verifier.login.persona.org/verify'
DOMAIN = 'localhost'
class PersonaAuthenticationBackend(object):
def authenticate(self, assertion):
logging.warning('authenticate function')
response = requests.post(
PERSONA_VERIFY_URL,
data={'assertion': assertion, 'audience': settings.DOMAIN}
)
logging.warning('got response form persona')
logging.warning(response.content.decode())
if response.ok and response.json()['status'] == 'okay':
email = response.json()['email']
try:
return User.objects.get(email=email)
except User.DoesNotExist:
return User.objects.create(email=email)
def get_user(self, email):
try:
return User.objects.get(email=email)
except User.DoesNotExist:
return None
Run Code Online (Sandbox Code Playgroud)
超级列表/settings.py
[....]
LOGGING = {
'version': 1,
'disable_existing_logger': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
},
},
'root': {'level': 'INFO'},
}
Run Code Online (Sandbox Code Playgroud)
我的“error.log”只是记录这个。
[2016-02-08 14:42:56 +0900] [3355] [INFO] Listening at: unix:/tmp/superlists-staging.mysite.com.socket (3355)
[2016-02-08 14:42:56 +0900] [3355] [INFO] Using worker: sync
[2016-02-08 14:42:56 +0900] [3359] [INFO] Booting worker with pid: 3359
[2016-02-08 14:58:22 +0900] [3355] [INFO] Handling signal: term
[2016-02-08 14:58:22 +0900] [3355] [INFO] Shutting down: Master
[2016-02-08 14:58:22 +0900] [3470] [INFO] Starting gunicorn 19.4.3
[2016-02-08 14:58:22 +0900] [3470] [INFO] Listening at: unix:/tmp/superlists-staging.mysite.com.socket (3470)
[2016-02-08 14:58:22 +0900] [3470] [INFO] Using worker: sync
[2016-02-08 14:58:22 +0900] [3474] [INFO] Booting worker with pid: 3474
Run Code Online (Sandbox Code Playgroud)
我想查看错误日志,我该怎么办?
对于那些 为(nginx + gunicorn + django)设置搜索错误日志的人:
只需使用这些(一些命令也特定于您的套接字文件所在的位置)
sudo journalctl -u nginxsudo less /var/log/nginx/access.logsudo less /var/log/nginx/error.logsudo journalctl -u gunicornsudo journalctl -u gunicorn.sockettl;dr 你的代码没有任何问题
看来您已正确遵循链接的教程,并且可能会在目录中找到您的日志文件/home/junsu/sites/superlists-staging.mysite.com/。
无论如何,您的问题中有几点需要解决,我会尽力做到这一点。
您上面引用的设置模块设置了一个日志记录处理程序console(StreamHandler),以及一个django可以使用该处理程序的记录器。
记录root器没有定义任何处理程序,“django”会将任何内容记录到stderr,并且仅适用于 INFO 及以上级别。我进行了快速测试,root记录器也有一个StreamHandler默认定义的。
您的authentication.py模块当前调用logging.warning哪些日志记录器root(即它确实如此logger = logging.getLogger(); logger.warning('stuff'))。但是,您可能想要定义更具体的处理程序以更轻松地找到模块的日志。参考教程的本节对此进行了解释。
默认情况下似乎设置为捕获stderr流,您当前将其重定向到日志文件。但是,我的建议是使用您的守护进程应用程序(似乎您正在使用upstart)来记录 stderr/out。
正如Gunicorn 文档中所解释的,配置upstart非常简单。
如果您在配置中删除该--error-logfile选项/etc/init/gunicorn-superlists-staging.mysite.com.conf,gunicorn 将默认记录其输出,stderr然后 upstart 可以以您喜欢的任何方式捕获它。
如果您使用的是 upstart 1.7 或更高版本,则默认情况下应启用 stdout/err 捕获。但是,如果您使用早期版本的 upstart,我的建议是在您的配置中添加一个console log选项,并且所有输出(stdout/stderr)将简单地记录到(我假设)/var/log/upstart/gunicorn-superlists-staging.mysite.com.log
| 归档时间: |
|
| 查看次数: |
19320 次 |
| 最近记录: |