// kafka-connector options: START
[[camel-log-kafka-connector-sink]]
= camel-log-kafka-connector sink configuration

When using camel-log-kafka-connector as sink make sure to use the following Maven dependency to have support for the connector:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.kafkaconnector</groupId>
  <artifactId>camel-log-kafka-connector</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel Kafka connector version -->
</dependency>
----


The camel-log sink connector supports 32 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Priority
| *camel.sink.path.loggerName* | Name of the logging category to use | null | ConfigDef.Importance.HIGH
| *camel.sink.endpoint.groupActiveOnly* | If true, will hide stats when no new messages have been received for a time interval, if false, show stats regardless of message traffic. | "true" | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.groupDelay* | Set the initial delay for stats (in millis) | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.groupInterval* | If specified will group message stats by this time interval (in millis) | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.groupSize* | An integer that specifies a group size for throughput logging. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.level* | Logging level to use. The default value is INFO. One of: [ERROR] [WARN] [INFO] [DEBUG] [TRACE] [OFF] | "INFO" | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.logMask* | If true, mask sensitive information like password or passphrase in the log. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.marker* | An optional Marker name to use. | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.basicPropertyBinding* | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.exchangeFormatter* | To use a custom exchange formatter | null | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.synchronous* | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.maxChars* | Limits the number of characters logged per line. | 10000 | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.multiline* | If enabled then each information is outputted on a newline. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showAll* | Quick option for turning all options on. (multiline, maxChars has to be manually set if to be used) | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showBody* | Show the message body. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showBodyType* | Show the body Java type. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showCaughtException* | If the exchange has a caught exception, show the exception message (no stack trace). A caught exception is stored as a property on the exchange (using the key org.apache.camel.Exchange#EXCEPTION_CAUGHT) and for instance a doCatch can catch exceptions. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showException* | If the exchange has an exception, show the exception message (no stacktrace) | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showExchangeId* | Show the unique exchange ID. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showExchangePattern* | Shows the Message Exchange Pattern (or MEP for short). | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showFiles* | If enabled Camel will output files | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showFuture* | If enabled Camel will on Future objects wait for it to complete to obtain the payload to be logged. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showHeaders* | Show the message headers. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showProperties* | Show the exchange properties. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showStackTrace* | Show the stack trace, if an exchange has an exception. Only effective if one of showAll, showException or showCaughtException are enabled. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.showStreams* | Whether Camel should show stream bodies or not (eg such as java.io.InputStream). Beware if you enable this option then you may not be able later to access the message body as the stream have already been read by this logger. To remedy this you will have to use Stream Caching. | false | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.skipBodyLineSeparator* | Whether to skip line separators when logging the message body. This allows to log the message body in one line, setting this option to false will preserve any line separators from the body, which then will log the body as is. | true | ConfigDef.Importance.MEDIUM
| *camel.sink.endpoint.style* | Sets the outputs style to use. One of: [Default] [Tab] [Fixed] | "Default" | ConfigDef.Importance.MEDIUM
| *camel.component.log.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | ConfigDef.Importance.MEDIUM
| *camel.component.log.basicPropertyBinding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | ConfigDef.Importance.MEDIUM
| *camel.component.log.exchangeFormatter* | Sets a custom ExchangeFormatter to convert the Exchange to a String suitable for logging. If not specified, we default to DefaultExchangeFormatter. | null | ConfigDef.Importance.MEDIUM
|===
// kafka-connector options: END
