Spring Integration 2.2 引入了 syslog 转换器: .SyslogToMapTransformerSpring中文文档

您需要将此依赖项包含在项目中:Spring中文文档

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

此转换器与入站适配器一起可用于接收和分析来自其他主机的系统日志记录。 转换器创建一个消息有效负载,其中包含来自 syslog 消息的元素映射。UDPTCPSpring中文文档

Spring Integration 3.0 引入了方便的命名空间支持,用于在单个元素中配置 syslog 入站适配器。Spring中文文档

从版本 4.1.1 开始,该框架现在支持 RFC 5424> 中指定的扩展 syslog 格式。 此外,使用 TCP 和 RFC5424 时,支持 RFC 6587 中所述的 RFC 6587octet countingnon-transparent framingSpring中文文档

Syslog 入站通道适配器

此元素包含一个或入站通道适配器和一个用于将 syslog 消息转换为 Spring Integration 消息的元素。 的委托 创建一条消息,其有效负载是 syslog 字段。 此外,除邮件外的所有字段也可作为邮件中的标头使用,并以 为前缀。 在此模式下,仅支持 RFC 3164 (BSD) 系统日志。UDPTCPMessageConverterDefaultMessageConverterSyslogToMapTransformerMapsyslog_Spring中文文档

从版本 4.1 开始,有一个名为 (默认为 ) 的属性。 当它是 时,转换器将消息有效负载保留为原始的完整 syslog 消息(在 中),同时仍然设置标头。DefaultMessageConverterasMaptruefalsebyte[]Spring中文文档

从版本 4.1.1 开始,RFC 5424 也受支持,通过使用 . 在这种情况下,字段不会作为标头复制,除非设置为 ,在这种情况下,原始消息是有效负载,解码的字段是标头。RFC5424MessageConverterasMapfalseSpring中文文档

若要将 RFC 5424 与 TCP 传输一起使用,必须提供其他配置以启用 RFC 6587 中描述的不同成帧技术。 适配器需要配置了 . 默认情况下,此反序列化程序处理并使用换行符 (LF) 来分隔 syslog 消息。 它使用未检测到的 when。 要使用不同的框架,您可以为其提供一些其他反序列化器。 虽然解串器可以同时支持 和 ,但仅支持后者的一种形式。 如果在转换器上,则必须在 .RFC6587SyslogDeserializeroctet countingnon-transparent framingByteArrayLfSerializeroctet countingnon-transparentoctet countingnon-transparent framingasMapfalseretainOriginalRFC6587SyslogDeserializer

配置示例

下面的示例定义了一个适配器,该适配器将消息发送到通道(适配器 Bean 名称为):UDPsyslogInsyslogIn.adapterSpring中文文档

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

适配器侦听端口 。1514Spring中文文档

下面的示例定义了一个适配器,该适配器将消息发送到通道(适配器 Bean 名称为):UDPfromSyslogsyslogInSpring中文文档

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

适配器侦听端口 。1514Spring中文文档

下面的示例定义了一个向通道发送消息的适配器(适配器 Bean 名称为 ):TCPsyslogInsyslogIn.adapterSpring中文文档

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

适配器侦听端口 。1514Spring中文文档

请注意该属性的添加。 此属性可以包含 或 。 它默认为 。protocoludptcpudpSpring中文文档

以下示例显示了将消息发送到通道的适配器:UDPfromSyslogSpring中文文档

<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>

前面的示例还显示了两个属性:和 。 它具有对 ID 为 和 的自定义的引用。 另请注意子元素。 您可以在此处设置各种 UDP 属性,如 中所定义。UDP 入站通道适配器属性SmartLifecycleauto-startupphaseorg.springframework.integration.syslog.MessageConverterconvertererror-channeludp-attributesSpring中文文档

使用元素时,必须在此处提供属性,而不是在元素本身上提供属性。udp-attributesportinbound-channel-adapter

以下示例显示了将消息发送到通道的适配器:TCPfromSyslogSpring中文文档

<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" />

它还演示了如何引用外部定义的连接工厂,该工厂可用于高级配置(套接字保持活动和其他用途)。 有关详细信息,请参阅 TCP 连接工厂Spring中文文档

外部配置的端口必须是 类型,并且端口是在那里定义的,而不是在元素本身上定义的。connection-factoryserverinbound-channel-adapter

以下示例显示了将消息发送到通道的适配器:TCPfromSyslogSpring中文文档

<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 5424RFC 6587Spring中文文档

若要将 RFC 5424 与 TCP 传输一起使用,必须提供其他配置以启用 RFC 6587 中描述的不同成帧技术。 适配器需要配置了 . 默认情况下,此反序列化程序处理并使用换行符 (LF) 来分隔 syslog 消息。 它使用未检测到的 when。 要使用不同的框架,您可以为其提供一些其他反序列化器。 虽然解串器可以同时支持 和 ,但仅支持后者的一种形式。 如果在转换器上,则必须在 .RFC6587SyslogDeserializeroctet countingnon-transparent framingByteArrayLfSerializeroctet countingnon-transparentoctet countingnon-transparent framingasMapfalseretainOriginalRFC6587SyslogDeserializer
使用元素时,必须在此处提供属性,而不是在元素本身上提供属性。udp-attributesportinbound-channel-adapter
外部配置的端口必须是 类型,并且端口是在那里定义的,而不是在元素本身上定义的。connection-factoryserverinbound-channel-adapter