我有一种情况,我想在 Python 中创建两个单独的记录器对象,每个对象都有自己独立的处理程序。“分离”是指我希望能够独立地将日志语句传递给每个对象,而不会污染其他日志。
主文件
import logging
from my_other_logger import init_other_logger
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO, handlers=[logging.StreamHandler(sys.stdout)])
other_logger = init_other_logger(__name__)
logger.info('Hello World') # Don't want to see this in the other logger
other_logger.info('Goodbye World') # Don't want to see this in the first logger
my_other_logger.py
import logging
import os, sys
def init_other_logger(namespace):
logger = logging.getLogger(namespace)
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler(LOG_FILE_PATH)
logger.addHandler(fh)
formatter = logging.Formatter('%(levelname)s:%(name)s:%(message)s')
fh.setFormatter(formatter)
#logger.propagate = False
return logger
我能够确定在这里有用的唯一配置是logger.propagate
属性。按原样运行上面的代码将所有日志语句通过管道传输到日志流和日志文件。当我没有logger.propagate = False
任何东西被传送到日志流时,两个日志对象再次将它们的输出传送到日志文件。
如何创建一个仅将日志发送到一个处理程序的日志对象,以及另一个将日志发送到另一个处理程序的日志对象?