使用mod_python时python日志记录模块的不同行为

Mic*_*ael 1 python django logging mod-python

我们有一个令人讨厌的问题,我们看到python日志记录模块在我们的服务器上运行mod_python时表现不同.在shell中执行相同的代码,或者使用runserver命令或使用mod_wsgi在django中执行相同的代码时,行为是正确的:

import logging
logger = logging.getLogger('site-errors')
logging.debug('logger=%s' % (logger.__dict__))
logging.debug('logger.parent=%s' % (logger.parent.__dict__))
logger.error('some message that is not logged.')
Run Code Online (Sandbox Code Playgroud)

然后我们进行以下记录:

2009-05-28 10:36:43,440,DEBUG,error_middleware.py:31,[logger = {'name':'site-errors','parent':<logging.RootLogger instance at 0x85f8aac>,'handlers': [],'level':0,'禁用':0,'manager':<logging.Manager实例位于0x85f8aec>,'propagate':1,'filters':[]}]

2009-05-28 10:36:43,440,DEBUG,error_middleware.py:32,[logger.parent = {'name':'root','parent':None,'handlers':[<logging.StreamHandler instance at at 0x8ec612c>,<logging.handlers.RotatingFileHandler实例位于0x8ec616c>],'level':10,'禁用':0,'传播':1,'过滤器':[]}]

可以看出,没有为子记录器"site-errors"设置处理程序或级别.

日志配置在settings.py中完成:

MONITOR_LOGGING_CONFIG = ROOT + 'error_monitor_logging.conf'

import logging
import logging.config

logging.config.fileConfig(MONITOR_LOGGING_CONFIG)

if CONFIG == CONFIG_DEV:
   DB_LOGLEVEL = logging.INFO
else:
   DB_LOGLEVEL = logging.WARNING
Run Code Online (Sandbox Code Playgroud)

第二个问题是我们还在__init__.py中添加了一个自定义处理程序,该处理程序将其作为error_middleware.py驻留在该文件夹中:

import logging
from django.conf import settings
from db_log_handler import DBLogHandler

handler = DBLogHandler()
handler.setLevel(settings.DB_LOGLEVEL)
logging.root.addHandler(handler)
Run Code Online (Sandbox Code Playgroud)

在日志记录中无法看到自定义处理程序!

如果有人知道问题所在,请告诉我们!不要犹豫要求提供额外的信息.这肯定有助于解决问题.

S.L*_*ott 5

如果不配置登录可能会更好settings.py.

我们在root中配置您的日志记录urls.py.这似乎更好.我没有读过足够的Django来源知道为什么,确切地说,它更好,但它对我们来说效果很好.我也会在这里添加自定义处理程序.

另外,仔细看看mod_wsgi.它看起来比mod_python好得多.

  • +1使用mod_wsgi.wsgi应用程序意味着您可以在其他服务器软件上部署,而mod_python特别糟糕. (2认同)