首页 > 解决方案 > 带有纯文本的 Python SocketHandler

问题描述

我已经设置了一个 SocketHandler 但注意到它创建了一个二进制输出。我检查了文档,发现它调用了“makePickle”函数来从消息记录中创建二进制输出。我使用 dictConfig() 来配置日志记录。

我想要的是发送到 TCP 服务器的纯文本日志消息,无需任何酸洗。我有两个想法:

  1. 创建从 SocketHandler 派生的自定义处理程序并覆盖 makePickle 以返回具有给定格式化程序的纯文本消息
  2. 创建从 StreamHandler 派生的自定义处理程序并传递 IP 和端口并将流初始化为 TCP 流

我无法决定哪个是更好的解决方案。你们能帮帮我吗?此外,如果有任何其他更简单、更直接的方法来实现这一点,我愿意接受。

谢谢

标签: python-3.xloggingtcp

解决方案


如果有人有同样的问题,我决定创建一个基于 Socket 处理程序的自定义处理程序。像这样:

class PlainTextTcpHandler(handlers.SocketHandler):
""" Sends plain text log message over TCP channel """


def makePickle(self, record):
    message = self.formatter.format(record) + "\r\n"
    return message.encode()

您可以将此处理程序用作任何其他默认处理程序。


推荐阅读