我们有一个令人讨厌的问题,我们看到 python 日志记录模块在我们的服务器上使用 mod_python 运行时表现不同。在 shell 或 django 中使用 runserver 命令或 mod_wsgi 执行相同的代码时,行为是正确的:
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.')
然后我们进行以下日志记录:
2009-05-28 10:36:43,740,DEBUG,error_middleware.py:31,[logger={'name': 'site-errors', 'parent': <logging.RootLogger instance at 0x85f8aac>, 'handlers': [], 'level': 0, 'disabled': 0, 'manager': <logging.Manager instance at 0x85f8aec>, 'propagate': 1, 'filters': []}]
2009-05-28 10:36:43,740,DEBUG,error_middleware.py:32,[logger.parent={'name': 'root', 'parent': None, 'handlers': [<logging.StreamHandler instance at 0x8ec612c>, <logging.handlers.RotatingFileHandler instance at 0x8ec616c>], 'level': 10, 'disabled': 0, 'propagate': 1, 'filters': []}]
可以看到,没有为子记录器“站点错误”设置处理程序或级别。
日志配置在 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
第二个问题是我们还在 __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)
在日志中看不到自定义处理程序!
如果有人知道问题出在哪里,请告诉我们!不要犹豫,要求提供更多信息。这肯定有助于解决问题。