登录Django和gunicorn

时间:2014-12-29 21:18:14

标签: python django logging gunicorn

我用gunicorn运行django应用程序,但我看不到任何我正在写的日志消息。

以下是编写日志的代码:

logger = logging.getLogger(__name__)

def home_page(request):
    logger.warning('in home page')

(注意:此代码肯定会运行,因为这是一个通向主页的视图)

这是来自settings.py的我的日志配置:

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

我使用以下参数运行gunicorn作为守护进程:

--access-logfile ../access.log --error-logfile --log-level debug ../error.log

access.log和error.log都被创建并填充了gunicorn消息,但我无法看到我写的消息。

由于

2 个答案:

答案 0 :(得分:19)

我已经解决了我的问题。提供详细信息,以便它可以帮助有类似问题的人。

决定不与gunicorn和django日志混淆并为django创建单独的日志文件。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
        'logfile': {
            'level':'DEBUG',
            'class':'logging.FileHandler',
            'filename': BASE_DIR + "/../logfile",
        },
    },
    'root': {
        'level': 'INFO',
        'handlers': ['console', 'logfile']
    },
}

使用此配置,每个使用severity> = INFO写入的消息都将写入文件" logfile"位于源目录之外。

答案 1 :(得分:1)

我想为此添加一个 2021 年的答案,因为服务器日志非常有用,而且我无法在不合并几个不同示例的情况下找到我正在寻找的答案。我在 Heroku 上托管的 Dockerized 应用程序中使用 django==3.1 和 gunicorn==20.0.4。我只是希望我的 Django 服务器日志在运行 docker-compose up 时显示在本地标准输出中,以及在 Heroku 上的 papertrail 日志中显示。这对我有用。

# In Dockerfile, I created a location for the logs, 
# and point there when starting gunicorn
RUN mkdir /logs
CMD gunicorn app.wsgi:application --bind 0.0.0.0:$PORT --workers 3 --capture-output --access-logfile /logs/gunicorn-access.log

然后在 Django 设置中,我将其用于 logging_dict:

import logging.config
# Clear prev config
LOGGING_CONFIG = None
logging.config.dictConfig({
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'console': {
            'format': '%(message)s',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'console',
        },
    },
    'loggers': {
        'gunicorn': { # this was what I was missing, I kept using django and not seeing any server logs
            'level': 'INFO',
            'handlers': ['console'],
            'propagate': True,
        },
    },

})