如果我使用 logger =logging.getLogger("Name") 创建记录器对象,我无法将文件模式从追加('a')更改为写入('w')。如果我将根记录器与 basicConfig 一起使用,则可以,但是当我想要的只是从 DEBUG 级别开始的我自己的消息时,我会记录大量系统调试消息。
我希望 (1) 将我自己的记录器对象的文件模式更改为“w”
或 (2) 将过滤器添加到根记录器。是否有可能从根记录器中过滤掉这些调试消息?
def create_log():
# create logger for "Sample App"
logger = logging.getLogger('automated_testing')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('results.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter('[%(asctime)s] %(levelname)8s --- %(message)s ' +
'(%(filename)s:%(lineno)s)',datefmt='%Y-%m-%d %H:%M:%S')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(ch)
logger.addHandler(fh)
return logger
就像是:
import sys
import logging
def create_logger():
# create logger for "Sample App"
logger = logging.getLogger('automated_testing')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('results.log', mode='w')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.INFO)
# create formatter and add it to the handlers
formatter = logging.Formatter('[%(asctime)s] %(levelname)8s --- %(message)s ' +
'(%(filename)s:%(lineno)s)',datefmt='%Y-%m-%d %H:%M:%S')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(ch)
logger.addHandler(fh)
return logger
logger = create_logger()
logger.log(logging.NOTSET, "NOTSET Message - 0")
logger.log(logging.DEBUG, "DEBUG Message - 10")
logger.log(logging.INFO, "INFO Message - 20")
logger.log(logging.WARNING, "WARNING Message - 30")
logger.log(logging.CRITICAL, "CRITICAL Message - 40")
打印到标准输出:
[2015-03-16 17:51:08] INFO --- INFO Message - 20 (temp3.py:34)
[2015-03-16 17:51:08] WARNING --- WARNING Message - 30 (temp3.py:35)
[2015-03-16 17:51:08] CRITICAL --- CRITICAL Message - 40 (temp3.py:36)
写入(而不是追加)到 results.log:
[2015-03-16 17:51:08] DEBUG --- DEBUG Message - 10 (temp3.py:33)
[2015-03-16 17:51:08] INFO --- INFO Message - 20 (temp3.py:34)
[2015-03-16 17:51:08] WARNING --- WARNING Message - 30 (temp3.py:35)
[2015-03-16 17:51:08] CRITICAL --- CRITICAL Message - 40 (temp3.py:36)
DEBUG
+ 记录在 results.txt 中,而仅INFO
+ 发送到标准输出。
请注意,NOTSET
然后,日志条目会传递到根记录器,因为根记录器上没有任何处理程序,因此会被丢弃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)