1
我不明白为什么日志事件正在打印到控制台,当我没有定义控制台处理程序。我读过的所有示例都明确定义了一个控制台处理程序(streamhandler),以便将消息输出到控制台。Python日志记录 - 防止日志事件被打印到控制台
我希望只将这些事件打印到文件中。
import logging
logger = logging.getLogger(__name__)
my_format = '%(asctime)-25s %(levelname)-8s LOGGER: %(name)-12s MODULE: %(module)-15s FUNCTION: %(funcName)-30s MSG: %(message)s'
my_datefmt ='%m/%d/%Y %I:%M:%S%p'
logging.basicConfig(format=my_format, datefmt=my_datefmt, level=logging.DEBUG)
formatter = logging.Formatter(my_format, datefmt=my_datefmt)
logger.setLevel(logging.DEBUG)
handler1 = logging.FileHandler('mylog.txt')
handler1.setLevel(logging.DEBUG)
handler1.setFormatter(formatter)
logger.addHandler(handler1)
logger.debug("Why is this printed to the console")
编辑:
有人指出,我并没有考虑到根记录。在调用logging.basicConfig时,默认的流处理程序被添加到根记录器(logger = getLogger())
根记录器的处理程序可以修改,但是我发现我可以防止我的记录器传播日志到根记录器。
这是可以做到像这样:
import logging
logger = logging.getLogger(__name__)
my_format = '%(asctime)-25s %(levelname)-8s LOGGER: %(name)-12s MODULE: %(module)-15s FUNCTION: %(funcName)-30s MSG: %(message)s'
my_datefmt ='%m/%d/%Y %I:%M:%S%p'
logging.basicConfig(format=my_format, datefmt=my_datefmt, level=logging.DEBUG)
formatter = logging.Formatter(my_format, datefmt=my_datefmt)
logger.setLevel(logging.DEBUG)
handler1 = logging.FileHandler('mylog.txt')
handler1.setLevel(logging.DEBUG)
handler1.setFormatter(formatter)
logger.addHandler(handler1)
logger.propagate = False ####
logger.debug("Why is this printed to the console")
感谢您的回答。 – Voldemort
不客气... errr他的名字不会说出来。 – Back2Basics