Syslog 支持
Spring Integration 2.2 引入了 syslog 转换器:。SyslogToMapTransformer
您需要将此依赖项包含在您的项目中:
-
Maven
-
Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-syslog</artifactId>
<version>6.4.0</version>
</dependency>
compile "org.springframework.integration:spring-integration-syslog:6.4.0"
此转换器与 or 入站适配器一起可用于接收和分析来自其他主机的 syslog 记录。
转换器会创建一个消息负载,其中包含 syslog 消息中元素的映射。UDP
TCP
Spring Integration 3.0 引入了方便的命名空间支持,用于在单个元素中配置 syslog 入站适配器。
Syslog 入站通道适配器
此元素包含一个 or 入站通道适配器和一个用于将 syslog 消息转换为 Spring 集成消息。
委托给 ,创建一条消息,其有效负载为 syslog 字段。
此外,除消息之外的所有字段也可用作消息中的标题,并带有前缀。
在此模式下,仅支持 RFC 3164 (BSD) 系统日志。UDP
TCP
MessageConverter
DefaultMessageConverter
SyslogToMapTransformer
Map
syslog_
从版本 4.1 开始,它有一个名为 (默认为 ) 的属性。
如果是 ,转换器会将消息负载保留为原始的完整 syslog 消息(在 a 中),同时仍设置标头。DefaultMessageConverter
asMap
true
false
byte[]
从 4.1.1 版本开始,通过使用 .
在这种情况下,字段不会复制为标头,除非设置为 ,在这种情况下,原始消息是有效负载,而解码的字段是标头。RFC5424MessageConverter
asMap
false
要将 RFC 5424 与 TCP 传输一起使用,您必须提供其他配置以启用 RFC 6587 中描述的不同成帧技术。
适配器需要一个配置了 .
默认情况下,此反序列化器处理并使用换行符 (LF) 分隔 syslog 消息。
它使用 when is not detected.
要使用不同的 framing,你可以为它提供一些其他的 deserializer。
虽然 deserializer 可以同时支持 and ,但仅支持后者的一种形式。
如果 在转换器上,则必须在 .RFC6587SyslogDeserializer octet counting non-transparent framing ByteArrayLfSerializer octet counting non-transparent octet counting non-transparent framing asMap false retainOriginal RFC6587SyslogDeserializer |
示例配置
以下示例定义了一个向通道发送消息的适配器(适配器 Bean 名称为):UDP
syslogIn
syslogIn.adapter
<int-syslog:inbound-channel-adapter id="syslogIn" port="1514" />
适配器侦听端口 。1514
以下示例定义了一个向通道发送消息的适配器(适配器 Bean 名称为):UDP
fromSyslog
syslogIn
<int-syslog:inbound-channel-adapter id="syslogIn"
channel="fromSyslog" port="1514" />
适配器侦听端口 。1514
以下示例定义了一个将消息发送到 channel 的适配器(适配器 Bean 名称为 ):TCP
syslogIn
syslogIn.adapter
<int-syslog:inbound-channel-adapter id="bar" protocol="tcp" port="1514" />
适配器侦听端口 。1514
请注意添加的属性。
此属性可以包含 或 。
它默认为 .protocol
udp
tcp
udp
以下示例显示了将消息发送到 channel 的适配器:UDP
fromSyslog
<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 为 和 .
另请注意 child 元素。
您可以在此处设置各种 UDP 属性,如 中所定义。UDP 入站通道适配器属性。SmartLifecycle
auto-startup
phase
org.springframework.integration.syslog.MessageConverter
converter
error-channel
udp-attributes
使用元素时,必须在该处提供属性,而不是在元素本身上提供属性。udp-attributes port inbound-channel-adapter |
以下示例显示了将消息发送到 channel 的适配器:TCP
fromSyslog
<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" />
它还展示了如何引用外部定义的 connection factory,该工厂可用于高级配置(套接字保持连接和其他用途)。 有关更多信息,请参阅 TCP 连接工厂。
外部配置的必须是 type ,并且端口是在那里定义的,而不是在元素本身上定义的。connection-factory server inbound-channel-adapter |
以下示例显示了将消息发送到 channel 的适配器:TCP
fromSyslog
<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" />
前面的示例配置为使用 converter,并配置了对带有 deserializer 的外部定义连接工厂的引用(RFC 5424 需要)。RFC 5424
RFC 6587