防止Python FileHandler日志路径重叠时的重复输出

0 投票
1 回答
1090 浏览
提问于 2025-04-17 17:05

下面的代码会导致同样的日志信息被输出两次:

log1 = logging.getLogger('foo')
log1.addHandler(logging.FileHandler('log.txt'))
log2 = logging.getLogger('foo.bar')
log2.addHandler(logging.FileHandler('log.txt'))

log2.warn("test message")

我意识到这是因为'foo.bar'同时匹配了'foo'和'foo.bar'这两个路径,所以两个日志记录器都会收到这个信息。我的问题是:有没有其他方法可以防止这种情况发生,除了确保我不会让两个日志记录器指向同一个文件和同一个日志路径?

1 个回答

3

你可以告诉 log2 不要把信息传递给上级日志处理器,这样就不会重复记录信息了:

log2.propagate = False

import logging

log1 = logging.getLogger('foo')
log1.addHandler(logging.FileHandler('log.txt'))
log2 = logging.getLogger('foo.bar')
log2.addHandler(logging.FileHandler('log.txt'))
log2.propagate = False
log2.warn("test message")

这样只会在 log.txt 中写入一次 test message

撰写回答