如何将结构化数据从 Twisted 发送到 syslog?

Posted

技术标签:

【中文标题】如何将结构化数据从 Twisted 发送到 syslog?【英文标题】:How can you send structured-data to syslog from Twisted? 【发布时间】:2012-05-03 12:19:19 【问题描述】:

我正在尝试将RFC5424 中定义的结构化数据从 Twisted 发送到 syslog。 我在 Ubuntu 上,系统日志实现是 rsyslog。

我正在运行带有“twistd --syslog”的扭曲应用程序,它将使用 log.msg 和 log.err 发送的消息发送到 syslog。

到目前为止,我一直在尝试根据规范格式化 log.msg 中的消息,例如:

log.err('[exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]')

但这不起作用。 Rsyslog 只是将其显示为常规消息。 有人知道怎么做这个吗? 我应该看看不同的日志库吗?

【问题讨论】:

您是否有使用 Python stdlib syslog 模块成功将“结构化数据”发送到 syslog 的代码示例?如果你能证明它是有效的,那么问题出在 Twisted 的 syslog 集成中将是一个很好的线索。如果不是,则说明问题出在 Python 的 syslog 模块中。 @Jean-PaulCalderone 似乎问题出在 Python 的 syslog 模块上,因为我也无法使用它发送结构化数据。我怀疑它是基于旧的RFC 3164 而不是RFC 5424。 @rkrzr 编辑问题(添加有关您现在遇到的问题的额外信息)或提供您自己的答案(如果您认为问题已解决)可能是合适的。 @thepaul 好的,我现在自己回答了这个问题。 【参考方案1】:

问题似乎与 Twisted 的 syslog 集成无关,而是 Python 的 stdlib syslog 模块不支持 RFC 5424 中描述的日志记录格式。

此外,RFC 5424 似乎是Dead On Arrival(至少是结构化数据部分)。它很可能会被Project lumberjack 中描述的语法所取代,该语法基于 JSON 或 XML。 因此,如果您对更结构化的日志记录感兴趣,您可能应该看看。

要根据该标准格式化消息,可以使用符合标准的自定义格式化程序,例如给定的here。

【讨论】:

以上是关于如何将结构化数据从 Twisted 发送到 syslog?的主要内容,如果未能解决你的问题,请参考以下文章

Twisted python 的问题 - 发送二进制数据

Twisted - 如何创建多协议进程并在协议之间发送数据

如何从协议外部发送 Autobahn/Twisted WAMP 消息?

Python - twisted reactor - 从线程角度看callLater和callFromThread之间的区别

在 Twisted App 中持久化数据

如何使用twisted通过UDP协议发送参数