加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

python – 为什么我的gunicorn进程忽略了Django的日志级别设置

发布时间:2020-12-13 21:33:10 所属栏目:Nginx 来源:网络整理
导读:我有Nginx,Gunicorn和Django都运行在同一个Ubuntu EC2实例上.我有一个相当传统的设置,并希望将所有gunicorn错误记录到特定文件. 我对Gunicorn的配置是: #!/bin/bashNAME="server"GUNICORNDIR=/ebs/env/binDJANGODIR=/ebs/server/SOCKFILE=/tmp/gunicorn.soc

我有Nginx,Gunicorn和Django都运行在同一个Ubuntu EC2实例上.我有一个相当传统的设置,并希望将所有gunicorn错误记录到特定文件.

我对Gunicorn的配置是:

#!/bin/bash

NAME="server"
GUNICORNDIR=/ebs/env/bin
DJANGODIR=/ebs/server/
SOCKFILE=/tmp/gunicorn.sock
LOGFILE=/var/log/gunicorn/gunicorn.error
USER=ubuntu
GROUP=ubuntu
NUM_WORKERS=5
TIMEOUT=60
DJANGO_SETTINGS_MODULE=settings
DJANGO_WSGI_MODULE=wsgi

echo "Starting $NAME"

RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

exec $GUNICORNDIR/gunicorn ${DJANGO_WSGI_MODULE}:application 
  --name $NAME 
  --workers $NUM_WORKERS 
  --timeout=$TIMEOUT 
  --user=$USER --group=$GROUP 
  --log-level=error --log-file=$LOGFILE 
  --bind=unix:$SOCKFILE

但是,使用此配置,我将从DEBUG及以上的所有日志写入文件.我的日志级参数似乎被忽略了.

我要找的是只写这些类型的日志消息:

2014-01-02 13:54:53 [3327] [CRITICAL] WORKER TIMEOUT (pid:3338)
2014-01-02 13:54:53 [3327] [CRITICAL] WORKER TIMEOUT (pid:3338)

我认为我的settings.py中指定的Django日志记录配置可能会干扰,所以我添加了一个处理程序和一个记录器来尝试并定位gunicorn,但这不起作用.

'handlers': {
'gunicorn': {
    'level': 'ERROR','class': 'logging.handlers.RotatingFileHandler','formatter': 'verbose','filename': '/ebs/log/gunicorn.error','maxBytes': 1024 * 1024 * 100,},}
'loggers': {
'gunicorn.errors': {
'level': 'ERROR','handlers': ['gunicorn'],'propagate': False,

以下是我正在运行的版本

Django 1.5.4
Nginx nginx / 1.1.19
Gunicorn 18.0

对这里有什么不妥的想法?

**更新**

这是我的django日志记录配置的样子:

LOGGING = {
'version': 1,'disable_existing_loggers': True,'root': {
    'level': 'WARNING','handlers': ['sentry'],'formatters': {
    'verbose': {
        'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },'simple': {
        'format': '%(levelname)s %(asctime)s -- %(message)s'
    }
},'handlers': {
    'sentry': {
        'level': 'ERROR','class': 'raven.contrib.django.raven_compat.handlers.SentryHandler','sentry_file': {
        'level': 'ERROR','filename': '/ebs/log/sentry_log.txt',# 100 mb
    },'celery': {
        'level': 'DEBUG','filename': '/ebs/log/celery/celery.log','apps': {
        'level': 'DEBUG','filename': '/ebs/log/apps.log','apps.dss': {
        'level': 'DEBUG','filename': '/ebs/log/dss_apps.log','loggers': {
    'django.db.backends': {
        'level': 'DEBUG','sentry': {
        'level': 'DEBUG','sentry.errors': {
        'level': 'ERROR','handlers': ['sentry_file','sentry'],'celery': {
        'level': 'INFO','handlers': ['sentry','celery'],'propagate': False
    },'handlers': ['apps','apps.dss' : {
        'level': 'DEBUG','handlers': ['apps.dss',}
最佳答案
gunicorn的–log级别设置仅影响gunicorns自己的错误记录工具.但是,应用程序的标准错误和标准输出也将最终出现在gunicorn日志中.我想你的Django日志配置中可能有一个StreamHandler. StreamHandler默认情况下会记录到stderr,因此最终会出现在gunicorn日志中.删除StreamHandler或提高级别以解决您的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读