Python LoggerAdapter正在向标准输出重复的日志条目

Python LoggerAdapter正在向标准输出重复的日志条目,python,logging,Python,Logging,我试图将上下文信息添加到python脚本的日志输出中。本质上,我使用SocketServer类来处理传入的网络连接,当客户机向服务器发送消息时,我希望向STDOUT创建一个日志条目,并创建一个包含时间、日志级别、客户机ip和接收到的消息的文件 我曾尝试使用过滤器(我无法使用,但我愿意接受建议)和LoggerAdapter实现此功能: 当我打电话给nodeCommsConLogging时,如下所示: nodeCommsConLogging.info("Message Received") 我在标

我试图将上下文信息添加到python脚本的日志输出中。本质上,我使用SocketServer类来处理传入的网络连接,当客户机向服务器发送消息时,我希望向STDOUT创建一个日志条目,并创建一个包含时间、日志级别、客户机ip和接收到的消息的文件

我曾尝试使用过滤器(我无法使用,但我愿意接受建议)和LoggerAdapter实现此功能:

当我打电话给nodeCommsConLogging时,如下所示:

nodeCommsConLogging.info("Message Received")
我在标准日志中得到了重复的条目

NodeCommsConnection: INFO     192.168.1.8 REQ;     Message Received
NodeCommsConnection: INFO     Message Received
提前感谢您的帮助和建议


编辑:添加了代码示例

记录器是分层的。因此您有一个根记录器(名为
'
,即blank)。每个其他记录器最终都是根记录器的子记录器

在您的情况下,您具有以下层次结构:

 root
   +-- NodeCommsConnection
如果您在子日志中记录了一些内容,它将尝试处理它,然后将日志消息传递给父日志记录器,除非您将
传播
设置为

由于您将appender添加到
节点通讯连接
,它将使用此appender记录其消息,然后调用root,root将使用其appender->控制台上的两个输出进行记录

因此,要么将appender添加到根记录器(并删除默认的控制台记录器),要么将
propagate
设置为
False

logging.getLogger('NodeCommsConnection').propagate = False

请在您的问题中包含重现这种行为所需的最少代码,好吗?pastebin不会持续,你的问题对未来的读者来说将是无用的。抱歉,我忘记了pastebin条目最终会过期。很好的解释,这正是我想要的。谢谢根记录器不是名为“根”吗
assert logging.getLogger().name='root'
Quick and dirty fix正在getLogger之后重新定义处理程序:
logger=logging.getLogger('my_logger');logger.handlers=[logger.handlers[0],]
@Garrett:你是对的,但我不是这个意思<代码>日志记录。getLogger(“”)
将返回根日志记录程序。
logging.getLogger('NodeCommsConnection').propagate = False