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