python-3.x - 带有纯文本的 Python SocketHandler
问题描述
我已经设置了一个 SocketHandler 但注意到它创建了一个二进制输出。我检查了文档,发现它调用了“makePickle”函数来从消息记录中创建二进制输出。我使用 dictConfig() 来配置日志记录。
我想要的是发送到 TCP 服务器的纯文本日志消息,无需任何酸洗。我有两个想法:
- 创建从 SocketHandler 派生的自定义处理程序并覆盖 makePickle 以返回具有给定格式化程序的纯文本消息
- 创建从 StreamHandler 派生的自定义处理程序并传递 IP 和端口并将流初始化为 TCP 流
我无法决定哪个是更好的解决方案。你们能帮帮我吗?此外,如果有任何其他更简单、更直接的方法来实现这一点,我愿意接受。
谢谢
解决方案
如果有人有同样的问题,我决定创建一个基于 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()
您可以将此处理程序用作任何其他默认处理程序。
推荐阅读
- ios - 我可以在 UISwitch 中设置描述值吗?
- c# - C#:如何找到 2 个可为空的日期时间之间的天数差异?
- angular - IIS7 上的 Angular 7 应用程序中的 500(URL 重写模块错误。)
- regex - XML 正则表达式,用于在输入字符串中排除名为“County”的单词,并且可以接受任何单词/数字/空格
- python - 如何使用 Sympy 自动简化二值有限域上的表达式?
- jquery - 如何通过类名查找元素的父级并添加 CSS?
- swift - 如何隐藏像example.app这样的包文件?
- vbscript - WScript 不适用于 HPALM 工作流程。但是在命令行中执行时工作正常
- unity3d - unity 2019 如何添加 NetworkManager 组件
- reactjs - 绑定一个 props 函数