Django 和 Gunicorn 中的错误日志记录



当我遇到错误时,我想登录 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

帐户/身份验证.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

超级列表/设置.py

[....]
LOGGING = {
    'version': 1,
    'disable_existing_logger': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
        },
    },
    'root': {'level': 'INFO'},
}

我的"错误.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

我想查看错误日志记录,我该怎么办?

对于那些搜索错误日志的人(nginx + gunicorn + django(安装程序:

只需使用这些(某些命令也特定于套接字文件所在的位置(

  • 通过键入以下内容检查 Nginx 进程日志:sudo journalctl -u nginx
  • 通过键入以下内容检查 Nginx 访问日志:sudo less /var/log/nginx/access.log
  • 通过键入以下内容检查 Nginx 错误日志:sudo less /var/log/nginx/error.log
  • 通过键入以下内容检查 Gunicorn 应用程序日志: sudo journalctl -u gunicorn
  • 通过键入以下内容检查 Gunicorn 套接字日志:sudo journalctl -u gunicorn.socket

参考

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')(。但是,您可能希望定义一个更具体的处理程序,以便更轻松地找到模块的日志。这在参考教程的这一部分中进行了说明。

Gunicorn 默认重定向 stderr

默认情况下,它似乎设置为捕获当前重定向到日志文件的stderr流。但是,我的建议是使用您的守护程序应用程序(似乎您正在使用upstart(来记录 stderr/out。

暴发户日志记录

正如 gunicorn 文档中所解释的,配置upstart非常简单。

如果你在/etc/init/gunicorn-superlists-staging.mysite.com.conf配置中删除--error-logfile选项,gunicorn 将默认将其输出记录到 stderr然后由暴发户以您喜欢的任何方式捕获。

如果您使用的是 upstart 1.7 或更高版本,则默认情况下应启用标准输出/错误捕获。但是,如果您使用早期版本的 upstart,我的建议是在配置中添加一个console log选项,所有输出(stdout/stderr(将简单地记录到(我假设(/var/log/upstart/gunicorn-superlists-staging.mysite.com.log

最新更新