我正在通过UWSGI服务器运行我的Django应用程序,并且正在启动32个进程-args -args in Ins脚本是:

ARGS="--pidfile ${PIDFILE} --uid ${UID} -s /tmp/${NAME}.sock --pythonpath ${GCS_HOME}/server/src/gcs --master -w wsgi -d ${GCS_HOME}/logs/uwsgi.log -p 32 -z 30"

版本为Python 2.6.5,Django 1.2.1,UWSGI 0.9.5.1

我想拥有一个日志文件,因此我正在使用一个基于多处理的日志处理程序 问题641420.

多插入处理程序在我拥有的简单测试应用程序中运行良好,当我运行manage.py runserver_plus和werkzeug,但是当我使用django和uwsgi运行时,什么也没记录(我也没有从uwsgi进程中获得错误或例外) 。

我的WSGI文件如下,如果有人可以识别我的配置问题或对正在发生的事情的解释,我将感激不已:

APP_VIRTUAL_ENV = "/home/devadmin/gcs/server/gcs_env/"
APP_PARENT_PATH = "/home/devadmin/gcs/server/src/"

##                                                                              

import sys
# Redirect stdout to comply with WSGI                                           
sys.stdout = sys.stderr

import os, site

# Set the settings module django should use                                     
os.environ['DJANGO_SETTINGS_MODULE'] = "gcs.settings"

# set the sys.path                                                              
site_packages_subpath = "/lib/python%s.%s/site-packages" % (sys.version_info[0]\
, sys.version_info[1], )
site_packages_path = os.path.join(APP_VIRTUAL_ENV, site_packages_subpath[1:])

sys_path = []
for path in sys.path:
    if site_packages_subpath in path and not path.startswith(APP_VIRTUAL_ENV):
        continue
    sys_path.append(path)

sys.path = [ APP_PARENT_PATH ]
sys.path += sys_path
site.addsitedir(site_packages_path)

# reorder sys.path                                                              
for path in sys_path:
    sys.path.remove(path)
sys.path += sys_path

# setup logging                                                                 
import os.path
import logging
import logging.config
logging.config.fileConfig(os.path.join(os.path.dirname(__file__), "logging.conf\
"))
有帮助吗?

解决方案

答案已更新 - 2013年5月15日 - 有关其他记录选项,请参见底部

如果要拥有一个日志文件 - 使用syslog,请让它处理将所有输入的多路复用处理到一个文件中。即使使用多处理的解决方法,将多个流程附加到单个文件上也很丑陋。

除了线程 /过程安全的优势外,各种日志记录信息的“下降”外,您始终可以指定远程主机以将日志发送到,也可以使log-file旋转变得轻而易举,因为您的客户在顾客写作时都变得轻而易举要么域插座或UDP套接字 - 他们不必在管理下面的文件时等待。更好的是,您不会丢失消息。

与Syslog-ng(Syslog-ng)结合使用,您可以进行大量精美的切片和切割,消息继电器,重复消息过滤等。

长话短说 - syslog比管理自己的日志文件更好(我认为),对Syslog的最佳论点是,您不会“拥有”服务器(从表面上看,日志文件可能不受限制)。

如果您想变得超级棒,请将日志数据发送到Splunk,然后将游戏提升到一个新的水平。大多数人都使用Splunk进行日志汇总,但是从应用程序进入Splunk的系统插入术是令人敬畏的数据挖掘功能的快捷方式,以了解性能瓶颈,使用图案等等。

#!/usr/bin/python

import logging
from logging.handlers import SysLogHandler

# Setup
logger = logging.getLogger( "mything" )
hdlr = SysLogHandler( address = '/dev/log', facility = SysLogHandler.LOG_USER )
logger.addHandler( hdlr )
formatter = logging.Formatter('%(name)s: %(levelname)s %(message)s')
hdlr.setFormatter( formatter )
logger.setLevel( logging.INFO )


logger.info( 'hello Laverne!' )
logger.debug( 'The Great Ragu has taken ill!' )

新内容 - 2013年5月15日

如果您有基础架构 /坚韧可以设置它 - 还有一个值得一提的选择 - 哨兵, ,它的库可用于Python(以及JavaScript等),该库为您提供了一个集中位置,供您发送错误以进行监视。看起来很整洁。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top