【发布时间】:2012-08-05 21:48:14
【问题描述】:
我在 wsgi (web2py) 应用程序的每个请求上运行以下代码:
import logging, logging.handlers
from logging import StreamHandler, Formatter
def get_configured_logger(name):
logger = logging.getLogger(name)
if (len(logger.handlers) == 0):
# This logger has no handlers, so we can assume it hasn't yet been configured (Django uses similiar trick)
# === Configure logger ===
# Create Formatted StreamHandler:
FORMAT = "%(process)s %(thread)s: %(message)s"
formatter = logging.Formatter(fmt=FORMAT)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.debug('CONFIGURING LOGGER')
return logger
# Get app specific logger:
logger = get_configured_logger(request.application)
logger.debug("TEST")
这意味着使用我想要的格式化处理程序配置一次记录器。它有效,除了我的标准输出中有双重条目:
81893 4329050112: CONFIGURING LOGGER
DEBUG:dummy:CONFIGURING LOGGER
81893 4329050112: TEST
DEBUG:dummy:TEST
如何使用我的新格式化处理程序并摆脱/隐藏默认处理程序?
【问题讨论】:
-
我从来没有用过这个类,但是你不觉得 logger.setLevel(logging.DEBUG) 和 logger.debug 有点多余吗?
-
lkjoel- 不,它们是两个不同的东西。调用
.debug(..)在调试级别创建日志条目,而设置日志级别告诉处理程序处理该级别的日志条目。 -
你在哪里打电话给
logging.basicConfig?如果是这样,请将其注释掉。 -
unutbu- web2py 框架确实在其核心中调用了 basicConfig,因此无法将其注释掉。我可以改写它吗?