Syslog
Since Camel 2.6
The syslog dataformat is used for working with RFC3164 and RFC5424 messages.
This component supports the following:
-
UDP consumption of syslog messages
-
Agnostic data format using either plain String objects or SyslogMessage model objects.
-
Type Converter from/to SyslogMessage and String
-
Integration with the Mina 2 component.
-
Integration with the Netty component.
-
Camel 2.14: Encoder and decoder for the Netty component.
-
Camel 2.14: Support for RFC5424 also.
Maven users will need to add the following dependency to their pom.xml
for this component:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-syslog</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
RFC3164 Syslog protocol
Syslog uses the user datagram protocol (UDP) as its underlying transport layer mechanism. The UDP port that has been assigned to syslog is 514.
Options
The Syslog dataformat supports 1 options, which are listed below.
Name | Default | Java Type | Description |
---|---|---|---|
contentTypeHeader |
|
|
Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSon etc. |
Spring Boot Auto-Configuration
When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-syslog-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
The component supports 2 options, which are listed below.
Name | Description | Default | Type |
---|---|---|---|
camel.dataformat.syslog.content-type-header |
Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSon etc. |
false |
Boolean |
camel.dataformat.syslog.enabled |
Enable syslog dataformat |
true |
Boolean |
ND
RFC5424 Syslog protocol
Since Camel 2.14
To expose a Syslog listener service we reuse the
existing Mina 2 component
or Netty where we just use
the SyslogDataFormat
to marshal and unmarshal messages
Exposing a Syslog listener
In our Spring XML file, we configure an endpoint to listen for udp messages on port 10514, note that in netty we disable the defaultCodec, this
will allow a fallback to a NettyTypeConverter and delivers the message as an InputStream:
<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring">
<dataFormats>
<syslog id="mySyslog"/>
</dataFormats>
<route>
<from uri="netty:udp://localhost:10514?sync=false&allowDefaultCodec=false"/>
<unmarshal ref="mySyslog"/>
<to uri="mock:stop1"/>
</route>
</camelContext>
The same route using Mina 2
<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring">
<dataFormats>
<syslog id="mySyslog"/>
</dataFormats>
<route>
<from uri="mina:udp://localhost:10514"/>
<unmarshal ref="mySyslog"/>
<to uri="mock:stop1"/>
</route>
</camelContext>
Sending syslog messages to a remote destination
<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring">
<dataFormats>
<syslog id="mySyslog"/>
</dataFormats>
<route>
<from uri="direct:syslogMessages"/>
<marshal ref="mySyslog"/>
<to uri="mina:udp://remotehost:10514"/>
</route>
</camelContext>