[英]Replace default handler of Python logger
我在 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
如何使用我的新格式化處理程序並刪除/隱藏默認處理程序?
也許下面的例子會有所幫助。 基本上,您可以刪除要禁用的記錄器的處理程序,或者不與您正在記錄的記錄器一起傳播。
$ cat testlog.py
import logging
logging.basicConfig(filename='foo', level=logging.DEBUG)
root_logger = logging.getLogger()
root_logger.debug('bar')
my_logger = logging.getLogger('my_logger')
FORMAT = "%(process)s %(thread)s: %(message)s"
formatter = logging.Formatter(fmt=FORMAT)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
my_logger.addHandler(handler)
my_logger.setLevel(logging.DEBUG)
my_logger.info('baz')
my_logger.propagate = False
my_logger.info('foobar')
my_logger.propagate = True
my_logger.info('foobaz')
root_logger.handlers = []
my_logger.info('barbaz')
$ python testlog.py
5927 140735224465760: baz
5927 140735224465760: foobar
5927 140735224465760: foobaz
5927 140735224465760: barbaz
$ cat foo
DEBUG:root:bar
INFO:my_logger:baz
INFO:my_logger:foobaz
您可以使用以下方法從 getLogger() 中刪除默認處理程序:
logging.getLogger().removeHandler(logging.getLogger().handlers[0])
或者在添加所需的處理程序之前先清除現有的處理程序:
logging.getLogger().handlers.clear()
這樣做之后,除了您添加的新處理程序外,這些日志將不再顯示:
DEBUG: Do stuff
WARNING: Do stuff
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.