【问题标题】:Why all application logs are written to uwsgi log?为什么所有应用程序日志都写入 uwsgi 日志?
【发布时间】:2011-12-13 10:40:58
【问题描述】:

我正在将 dJango+uWSGI 用于 Web 项目。但是我发现我所有的日志都会写入uwsgi日志!!

情况是:当我使用logger.xxx写日志时,我在settings.py中配置的logger会收到日志,但是uwsgi.log也会有日志写入那个文件!而最奇怪的是,在我的一些项目中,我的应用程序日志会按照我的配置写入日志文件,而所有的守护进程日志都会写入uwsgi.log;但其他项目的应用程序日志也将写入 uwsgi.log!

这是我的日志配置:

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
    'verbose': {
        'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },
    'detail': {
        'format': '%(asctime)s %(levelname)s %(module)s %(message)s'
    },
    'message_only': {
        'format': '%(asctime)s %(message)s'
    },
    'simple': {
        'format': '%(levelname)s %(asctime)s %(message)s'
    },
},
'handlers': {
    'mail_admins': {
        'level': 'ERROR',
        'class': 'django.utils.log.AdminEmailHandler'
    },
    'file':{
        'level':'DEBUG',
        'class':'logging.handlers.TimedRotatingFileHandler',
        'formatter': 'simple',
        'filename':  os.path.join(LOG_BASE, 'web.log'),
        'when': 'D',
        'backupCount' : 3
    },
    'pref':{
        'level':'DEBUG',
        'class':'logging.handlers.RotatingFileHandler',
        'formatter': 'message_only',
        'filename': os.path.join(LOG_BASE, 'pref.log'),
        'maxBytes': 10 * 1024 * 1024, # 10MB
        'backupCount' : 5
    },
    'err':{
        'level':'ERROR',
        'class':'logging.handlers.TimedRotatingFileHandler',
        'formatter': 'detail',
        'filename': os.path.join(LOG_BASE, 'err.log'),
        'when': 'D',
        'backupCount' : 3
    },
},
'loggers': {
    'django.request': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True,
    },
    'myproject' : {
        'handlers': ['file', 'err' ],
        'level': 'INFO',
    },
    'myproject+prefs' : {
        'handlers': ['pref'],
        'level': 'DEBUG',
    }
}
}

还有我的 uwsgi.xml:

<uwsgi>
<socket>:8888</socket>
<env>DJANGO_SETTINGS_MODULE=myproject.settings</env>
<module>django.core.handlers.wsgi:WSGIHandler()</module>
<processes>4</processes>
<master />
<master-as-root />
<!-- request timeout -->
<harakiri>15</harakiri>
<post-buffering>32768</post-buffering>
<daemonize>/var/log/myproject/uwsgi.log</daemonize>
<listen>32768</listen>
<socket-timeout>4</socket-timeout>
<disable-logging />
</uwsgi>

这是我使用日志记录的方式:

import logging
from time import time

logger = logging.getLogger('myproject')


logger.info('my log')

【问题讨论】:

    标签: python logging uwsgi


    【解决方案1】:

    你只需混合 Django 日志系统和 uWSGI。

    'formatters': {
        'simple': {
            'format': '%(levelname)s | %(message)s'
        },
    ...
        },
    'handlers': {
        'console':{
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
    ...
    },
    'loggers': {
        'django.request': {
            'handlers': ['console', ],
            'level': 'DEBUG',
            'propagate': True,
            },
        },
    

    这会将所有请求记录到控制台,并且此日志会处理 uWSGI。

    'class': 'logging.StreamHandler',这是保存日志到uWSGI日志的关键。

    你的 Django 日志保存到'filename': os.path.join(LOG_BASE, 'err.log'),

    【讨论】:

      【解决方案2】:

      我认为问题出在 uwsgi.xml 中的 daemonize 标签

      文档(http://projects.unbit.it/uwsgi/wiki/Doc)说:

      块引用 使用日志文件或 udp 服务器在后台运行进程

      --daemonize /var/log/uwsgi.log

      将 damonize uWSGI 将日志消息写入 /var/log/uwsgi.log

      【讨论】:

      • 但我认为 /var/log/uwsgi.log 应该只包含守护进程日志,而不是我的应用程序日志。
      • 如果你尝试在 python 控制台中执行 logger.info('blabla') 会发生什么?
      • 我对@9​​87654321@一无所获。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      相关资源
      最近更新 更多