Spring Integration 2.2 introduced the Syslog transformer
SyslogToMapTransformer
. This transformer, together with
a UDP
or TCP
inbound adapter could be used to receive
and analyze syslog records from other hosts. The transformer creates a message
payload containing a map of the elements from the syslog message.
Spring Integration 3.0 introduced convenient namespace support for configuring a Syslog inbound adapter in a single element.
Starting with version 4.1.1, the framework now supports the
extended Syslog format, as specified in RFC 5424>. In addition, when using TCP and RFC5424, both octet counting
and
non-transparent framing
described in RFC 6587 are supported.
This element encompasses a UDP
or TCP
inbound channel adapter
and a MessageConverter
to convert the Syslog message to
a Spring Integration message. The DefaultMessageConverter
delegates
to the SyslogToMapTransformer
, creating a message with its payload
being the Map
of Syslog fields. In addition, all fields except the message
are also made available as headers in the message, prefixed with syslog_
.
In this mode, only RFC 3164
(BSD) syslogs are supported.
Since version 4.1,
the DefaultMessageConverter
has a property asMap
(default true
); when it is false
, the converter will leave
the message payload as the original complete syslog message, in a byte[]
,
while still setting the headers.
Since version 4.1.1, RFC 5424 is also supported, using the
RFC5424MessageConverter
; in this case the fields are not
copied as headers, unless asMap
is set to false
, in which
case the original message is the payload and the decoded fields are headers.
![]() | Important |
---|---|
To use RFC 5424 with a TCP transport, additional configuration is required, to enable
the different framing techniques described in RFC 6587. The adapter needs a
TCP connection factory configured with a RFC6587SyslogDeserializer .
By default, this deserializer will handle octet counting and
non-transparent framing , using a linefeed (LF) to delimit syslog messages;
it uses a ByteArrayLfSerializer when octet counting
is not detected. To use different non-transparent framing, you can provide
it with some other deserializer. While the deserializer can support both octet counting
and non-transparent framing , only one form of the latter is supported.
If asMap is false on the converter, you must set the
retainOriginal constructor argument in the RFC6587SyslogDeserializer .
|
<int-syslog:inbound-channel-adapter id="syslogIn" port="1514" />
A UDP
adapter that sends messages to channel syslogIn
(the adapter bean
name is syslogIn.adapter
). The adapter listens on port 1514
.
<int-syslog:inbound-channel-adapter id="syslogIn" channel="fromSyslog" port="1514" />
A UDP
adapter that sends message to channel fromSyslog
(the adapter bean
name is syslogIn
). The adapter listens on port 1514
.
<int-syslog:inbound-channel-adapter id="bar" protocol="tcp" port="1514" />
A TCP
adapter that sends messages to channel syslogIn
(the adapter bean
name is syslogIn.adapter
). The adapter listens on port 1514
.
Note the addition of the protocol
attribute. This attribute can contain udp
or tcp
; it defaults to udp
.
<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>
A UDP
adapter that sends messages to channel fromSyslog
. It also shows the
SmartLifecyle
attributes auto-startup
and
phase
. It has a reference to a custom
org.springframework.integration.syslog.MessageConverter
with id converter
and an error-channel
. Also notice the
udp-attributes
child element. You can set various UDP attributes here, as defined
in Table 29.2, “UDP Inbound Channel Adapter Attributes”.
![]() | Note |
---|---|
When using the udp-attributes element, the port attribute must be
provided there rather than on the inbound-channel-adapter element itself.
|
<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" />
A TCP
adapter that sends messages to channel fromSyslog
. It also shows
how to reference an externally defined connection factory, which can be used for advanced
configuration (socket keep alive etc). For more information, see Section 29.3, “TCP Connection Factories”.
![]() | Note |
---|---|
The externally configured connection-factory must be of type server and,
the port is defined there rather than on the inbound-channel-adapter element itself.
|
<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" />
A TCP
adapter that sends messages to channel fromSyslog
. It is configured
to use the RFC 5424
converter and is configured
with a reference to an externally defined connection factory with the RFC 6587
deserializer (required for RFC 5424).