如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

Syslog 支持

Spring Integration 2.2 引入了 syslog 转换器:SyslogToMapTransformerspring-doc.cadn.net.cn

您需要将以下依赖项包含到您的项目中:spring-doc.cadn.net.cn

<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-syslog</artifactId>
    <version>6.4.10</version>
</dependency>
compile "org.springframework.integration:spring-integration-syslog:6.4.10"

此转换器与 UDPTCP 入站适配器配合使用,可用于接收和分析来自其他主机的 syslog 记录。 该转换器会创建一个消息负载(payload),其中包含一个映射表,用于存放 syslog 消息的各个元素。spring-doc.cadn.net.cn

Spring Integration 3.0 引入了便捷的命名空间支持,允许通过单个元素配置 syslog 入站适配器。spring-doc.cadn.net.cn

从 4.1.1 版本开始,该框架现在支持扩展的 syslog 格式,如 RFC 5424> 中所规定。 此外,当使用 TCP 和 RFC5424 时,RFC 6587 中描述的 octet countingnon-transparent framing 均得到支持。spring-doc.cadn.net.cn

Syslog 入站通道适配器

此元素包含一个 UDPTCP 入站通道适配器,以及一个用于将 syslog 消息转换为 Spring Integration 消息的 MessageConverterDefaultMessageConverter 委托给 SyslogToMapTransformer,创建一个消息,其负载为 syslog 字段的 Map。 此外,除消息外的所有字段也作为消息头提供,并带有 syslog_ 前缀。 在此模式下,仅支持 RFC 3164 (BSD) syslog。spring-doc.cadn.net.cn

自版本 4.1 起,DefaultMessageConverter 拥有一个名为 asMap 的属性(默认值为 true)。 当该属性为 false 时,转换器会将消息负载保留为原始的完整 syslog 消息(位于 byte[] 中),同时仍会设置请求头。spring-doc.cadn.net.cn

自 4.1.1 版本起,通过使用 RFC5424MessageConverter 也支持 RFC 5424。 在这种情况下,字段不会作为头信息复制,除非将 asMap 设置为 false;此时原始消息为负载(payload),而解码后的字段则作为头信息。spring-doc.cadn.net.cn

要使用 RFC 5424 配合 TCP 传输,您必须提供额外的配置以启用 RFC 6587 中描述的多种帧定界技术。 适配器需要一个已配置为 RFC6587SyslogDeserializer 的 TCP 连接工厂。 默认情况下,此反序列化器通过使用换行符 (LF) 来分隔 Syslog 消息,从而处理 octet countingnon-transparent framing。 当未检测到 octet counting 时,它使用 ByteArrayLfSerializer。 若要使用不同的 non-transparent 帧定界方式,您可以提供其他反序列化器。 虽然该反序列化器支持 octet countingnon-transparent framing,但仅支持后者的其中一种形式。 如果转换器上的 asMapfalse,则必须在 RFC6587SyslogDeserializer 中设置 retainOriginal 构造函数参数。

示例配置

以下示例定义了一个UDP适配器,它将消息发送到syslogIn通道(该适配器的 Bean 名称为syslogIn.adapter):spring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="syslogIn" port="1514" />

适配器监听端口 1514spring-doc.cadn.net.cn

以下示例定义了一个UDP适配器,它将消息发送到fromSyslog通道(该适配器的 Bean 名称为syslogIn):spring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="syslogIn"
	channel="fromSyslog" port="1514" />

适配器监听端口 1514spring-doc.cadn.net.cn

以下示例定义了一个TCP适配器,它将消息发送到通道syslogIn(适配器的 Bean 名称为syslogIn.adapter):spring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="bar" protocol="tcp" port="1514" />

适配器监听端口 1514spring-doc.cadn.net.cn

注意添加了 protocol 属性。 该属性可包含 udptcp。 其默认值为 udpspring-doc.cadn.net.cn

以下示例展示了一个UDP适配器,它将消息发送到通道fromSyslogspring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="udpSyslog"
	channel="fromSyslog"
	auto-startup="false"
	phase="10000"
	converter="converter"
	send-timeout="1000"
	error-channel="errors">
		<int-syslog:udp-attributes port="1514" lookup-host="false" />
</int-syslog:inbound-channel-adapter>

上述示例还展示了两个 SmartLifecycle 属性:auto-startupphase。 它引用了一个 ID 为 converter 的自定义 org.springframework.integration.syslog.MessageConverter,并包含一个 error-channel。 同时请注意 udp-attributes 子元素。 您可以在此处设置各种 UDP 属性,如 .UDP Inbound Channel Adapter Attributes 中所定义的那样。spring-doc.cadn.net.cn

当您使用 udp-attributes 元素时,您必须在 port 属性中提供该值,而不是在 inbound-channel-adapter 元素本身上。

以下示例展示了一个TCP适配器,它将消息发送到通道fromSyslogspring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="TcpSyslog"
	protocol="tcp"
	channel="fromSyslog"
	connection-factory="cf" />

<int-ip:tcp-connection-factory id="cf" type="server" port="1514" />

它还展示了如何引用外部定义的连接工厂,该工厂可用于高级配置(如 socket 保活和其他用途)。 更多信息,请参见 TCP 连接工厂spring-doc.cadn.net.cn

外部配置的connection-factory必须是server类型,端口在此处定义,而不是在inbound-channel-adapter元素本身上定义。

以下示例展示了一个TCP适配器,它将消息发送到通道fromSyslogspring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="rfc5424Tcp"
	protocol="tcp"
	channel="fromSyslog"
	connection-factory="cf"
	converter="rfc5424" />

<int-ip:tcp-connection-factory id="cf"
	using-nio="true"
	type="server"
	port="1514"
	deserializer="rfc6587" />

<bean id="rfc5424" class="org.springframework.integration.syslog.RFC5424MessageConverter" />

<bean id="rfc6587" class="org.springframework.integration.syslog.inbound.RFC6587SyslogDeserializer" />

上述示例配置为使用 RFC 5424 转换器,并配置了对具有 RFC 6587 反序列化器的外部定义连接工厂的引用(RFC 5424 所需)。spring-doc.cadn.net.cn