---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    funktion.fabric8.io/kind: Connector
  name: log
data:
  deployment.yml: |
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        funktion.fabric8.io/kind: Subscription
        connector: log
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            funktion.fabric8.io/kind: Subscription
            connector: log
        spec:
          containers:
          - image: funktion/connector-log:${project.version}
            name: connector
  schema.yml: |
    ---
    component:
      kind: component
      scheme: log
      syntax: log:loggerName
      title: Log
      description: The log component logs message exchanges to the underlying logging mechanism.
      label: core,monitoring
      deprecated: false
      async: false
      producerOnly: true
      javaType: org.apache.camel.component.log.LogComponent
      groupId: org.apache.camel
      artifactId: camel-core
      version: 2.18.3
    componentProperties:
      exchangeFormatter:
        kind: property
        type: object
        javaType: org.apache.camel.spi.ExchangeFormatter
        deprecated: false
        secret: false
        description: Sets a custom ExchangeFormatter to convert the Exchange to a String suitable for logging. If not specified we default to DefaultExchangeFormatter.
        order: 0
    properties:
      loggerName:
        kind: path
        group: producer
        required: true
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: The logger name to use
        order: 0
      groupActiveOnly:
        kind: parameter
        group: producer
        type: boolean
        javaType: java.lang.Boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: If true will hide stats when no new messages have been received for a time interval if false show stats regardless of message traffic.
        order: 1
      groupDelay:
        kind: parameter
        group: producer
        type: integer
        javaType: java.lang.Long
        deprecated: false
        secret: false
        description: Set the initial delay for stats (in millis)
        order: 2
      groupInterval:
        kind: parameter
        group: producer
        type: integer
        javaType: java.lang.Long
        deprecated: false
        secret: false
        description: If specified will group message stats by this time interval (in millis)
        order: 3
      groupSize:
        kind: parameter
        group: producer
        type: integer
        javaType: java.lang.Integer
        deprecated: false
        secret: false
        description: An integer that specifies a group size for throughput logging.
        order: 4
      level:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        enum:
        - ERROR
        - WARN
        - INFO
        - DEBUG
        - TRACE
        - OFF
        deprecated: false
        secret: false
        defaultValue: INFO
        description: Logging level to use. The default value is INFO.
        order: 5
      marker:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: An optional Marker name to use.
        order: 6
      synchronous:
        kind: parameter
        group: advanced
        label: advanced
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        order: 7
      maxChars:
        kind: parameter
        group: formatting
        label: formatting
        type: integer
        javaType: int
        deprecated: false
        secret: false
        defaultValue: "10000"
        description: Limits the number of characters logged per line.
        order: 8
      multiline:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: If enabled then each information is outputted on a newline.
        order: 9
      showAll:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Quick option for turning all options on. (multiline maxChars has to be manually set if to be used)
        order: 10
      showBody:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: Show the message body.
        order: 11
      showBodyType:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: Show the body Java type.
        order: 12
      showCaughtException:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: f 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 link org.apache.camel.ExchangeEXCEPTION_CAUGHT and for instance a doCatch can catch exceptions.
        order: 13
      showException:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: If the exchange has an exception show the exception message (no stacktrace)
        order: 14
      showExchangeId:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Show the unique exchange ID.
        order: 15
      showExchangePattern:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: Shows the Message Exchange Pattern (or MEP for short).
        order: 16
      showFiles:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: If enabled Camel will output files
        order: 17
      showFuture:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: If enabled Camel will on Future objects wait for it to complete to obtain the payload to be logged.
        order: 18
      showHeaders:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Show the message headers.
        order: 19
      showOut:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: If the exchange has an out message show the out message.
        order: 20
      showProperties:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Show the exchange properties.
        order: 21
      showStackTrace:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Show the stack trace if an exchange has an exception. Only effective if one of showAll showException or showCaughtException are enabled.
        order: 22
      showStreams:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: 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.
        order: 23
      skipBodyLineSeparator:
        kind: parameter
        group: formatting
        label: formatting
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: 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.
        order: 24
      style:
        kind: parameter
        group: formatting
        label: formatting
        type: string
        javaType: org.apache.camel.processor.DefaultExchangeFormatter.OutputStyle
        enum:
        - Default
        - Tab
        - Fixed
        deprecated: false
        secret: false
        defaultValue: Default
        description: Sets the outputs style to use.
        order: 25
  documentation.adoc: "[[Log-LogComponent]]\nLog Component\n~~~~~~~~~~~~~\n\nThe *log:*\
    \ component logs message exchanges to the underlying logging\nmechanism.\n\nCamel\
    \ uses http://www.slf4j.org/[sfl4j] which allows you to configure\nlogging via,\
    \ among others:\n\n* http://logging.apache.org/log4j/[Log4j]\n* http://logback.qos.ch/[Logback]\n\
    *\nhttp://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/package-summary.html[JDK\n\
    Util Logging logging]\n\n[[Log-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n\
    -----------------------------\nlog:loggingCategory[?options]\n-----------------------------\n\
    \nWhere *loggingCategory* is the name of the logging category to use. You\ncan\
    \ append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
    \nINFO:*Using Logger instance from the the Registry*\nAs of *Camel 2.12.4/2.13.1*,\
    \ if there's single instance\nof\_`org.slf4j.Logger` found in the Registry, the\
    \ *loggingCategory* is no\nlonger used to create logger instance. The registered\
    \ instance is used\ninstead. Also it is possible to reference particular\_`Logger`\
    \ instance\nusing\_`?logger=#myLogger` URI parameter. Eventually, if there's no\n\
    registered and URI\_`logger` parameter, the logger instance is created\nusing\
    \ *loggingCategory*.\n\nFor example, a log endpoint typically specifies the logging\
    \ level using\nthe `level` option, as follows:\n\n[source,java]\n----------------------------------------\n\
    log:org.apache.camel.example?level=DEBUG\n----------------------------------------\n\
    \nThe default logger logs every exchange (_regular logging_). But Camel\nalso\
    \ ships with the `Throughput` logger, which is used whenever the\n`groupSize`\
    \ option is specified.\n\nTIP:*Also a log in the DSL*\nThere is also a `log` directly\
    \ in the DSL, but it has a different\npurpose. Its meant for lightweight and human\
    \ logs. See more details at\nlink:logeip.html[LogEIP].\n\n[[Log-Options]]\nOptions\n\
    ^^^^^^^\n\n\n\n// component options: START\nThe Log component supports 1 options\
    \ which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"\
    header\"]\n|=======================================================================\n\
    | Name | Java Type | Description\n| exchangeFormatter | ExchangeFormatter | Sets\
    \ a custom ExchangeFormatter to convert the Exchange to a String suitable for\
    \ logging. If not specified we default to DefaultExchangeFormatter.\n|=======================================================================\n\
    {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
    The Log component supports 26 endpoint options which are listed below:\n\n{% raw\
    \ %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
    | Name | Group | Default | Java Type | Description\n| loggerName | producer |\
    \  | String | *Required* The logger name to use\n| groupActiveOnly | producer\
    \ | true | Boolean | If true will hide stats when no new messages have been received\
    \ for a time interval if false show stats regardless of message traffic.\n| groupDelay\
    \ | producer |  | Long | Set the initial delay for stats (in millis)\n| groupInterval\
    \ | producer |  | Long | If specified will group message stats by this time interval\
    \ (in millis)\n| groupSize | producer |  | Integer | An integer that specifies\
    \ a group size for throughput logging.\n| level | producer | INFO | String | Logging\
    \ level to use. The default value is INFO.\n| marker | producer |  | String |\
    \ An optional Marker name to use.\n| synchronous | advanced | false | boolean\
    \ | Sets whether synchronous processing should be strictly used or Camel is allowed\
    \ to use asynchronous processing (if supported).\n| maxChars | formatting | 10000\
    \ | int | Limits the number of characters logged per line.\n| multiline | formatting\
    \ | false | boolean | If enabled then each information is outputted on a newline.\n\
    | showAll | formatting | false | boolean | Quick option for turning all options\
    \ on. (multiline maxChars has to be manually set if to be used)\n| showBody |\
    \ formatting | true | boolean | Show the message body.\n| showBodyType | formatting\
    \ | true | boolean | Show the body Java type.\n| showCaughtException | formatting\
    \ | false | boolean | f 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 link org.apache.camel.ExchangeEXCEPTION_CAUGHT and for\
    \ instance a doCatch can catch exceptions.\n| showException | formatting | false\
    \ | boolean | If the exchange has an exception show the exception message (no\
    \ stacktrace)\n| showExchangeId | formatting | false | boolean | Show the unique\
    \ exchange ID.\n| showExchangePattern | formatting | true | boolean | Shows the\
    \ Message Exchange Pattern (or MEP for short).\n| showFiles | formatting | false\
    \ | boolean | If enabled Camel will output files\n| showFuture | formatting |\
    \ false | boolean | If enabled Camel will on Future objects wait for it to complete\
    \ to obtain the payload to be logged.\n| showHeaders | formatting | false | boolean\
    \ | Show the message headers.\n| showOut | formatting | false | boolean | If the\
    \ exchange has an out message show the out message.\n| showProperties | formatting\
    \ | false | boolean | Show the exchange properties.\n| showStackTrace | formatting\
    \ | false | boolean | Show the stack trace if an exchange has an exception. Only\
    \ effective if one of showAll showException or showCaughtException are enabled.\n\
    | showStreams | formatting | false | boolean | 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.\n| skipBodyLineSeparator | formatting | true | boolean | 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.\n| style | formatting | Default\
    \ | OutputStyle | Sets the outputs style to use.\n|=======================================================================\n\
    {% endraw %}\n// endpoint options: END\n\n\n[[Log-Regularloggersample]]\nRegular\
    \ logger sample\n^^^^^^^^^^^^^^^^^^^^^\n\nIn the route below we log the incoming\
    \ orders at `DEBUG` level before\nthe order is processed:\n\n[source,java]\n------------------------------------------------------------------------------------------\n\
    from(\"activemq:orders\").to(\"log:com.mycompany.order?level=DEBUG\").to(\"bean:processOrder\"\
    );\n------------------------------------------------------------------------------------------\n\
    \nOr using Spring XML to define the route:\n\n[source,xml]\n---------------------------------------------------\n\
    \  <route>\n    <from uri=\"activemq:orders\"/>\n    <to uri=\"log:com.mycompany.order?level=DEBUG\"\
    />\n    <to uri=\"bean:processOrder\"/>\n  </route> \n---------------------------------------------------\n\
    \n[[Log-Regularloggerwithformattersample]]\nRegular logger with formatter sample\n\
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn the route below we log the incoming\
    \ orders at `INFO` level before the\norder is processed.\n\n[source,java]\n--------------------------------------------------------------------------------------\n\
    from(\"activemq:orders\").\n    to(\"log:com.mycompany.order?showAll=true&multiline=true\"\
    ).to(\"bean:processOrder\");\n--------------------------------------------------------------------------------------\n\
    \n[[Log-ThroughputloggerwithgroupSizesample]]\nThroughput logger with groupSize\
    \ sample\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn the route below we log\
    \ the throughput of the incoming orders at\n`DEBUG` level grouped by 10 messages.\n\
    \n[source,java]\n-----------------------------------------------------------------------------------\n\
    from(\"activemq:orders\").\n    to(\"log:com.mycompany.order?level=DEBUG&groupSize=10\"\
    ).to(\"bean:processOrder\");\n-----------------------------------------------------------------------------------\n\
    \n[[Log-ThroughputloggerwithgroupIntervalsample]]\nThroughput logger with groupInterval\
    \ sample\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThis route will result\
    \ in message stats logged every 10s, with an\ninitial 60s delay and stats should\
    \ be displayed even if there isn't any\nmessage traffic.\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------------\n\
    from(\"activemq:orders\").\nto(\"log:com.mycompany.order?level=DEBUG&groupInterval=10000&groupDelay=60000&groupActiveOnly=false\"\
    ).to(\"bean:processOrder\");\n-----------------------------------------------------------------------------------------------------------------------------\n\
    \nThe following will be logged:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------------------\n\
    \"Received: 1000 new messages, with total 2000 so far. Last group took: 10000\
    \ millis which is: 100 messages per second. average: 100\"\n------------------------------------------------------------------------------------------------------------------------------------\n\
    \n[[Log-Fullcustomizationoftheloggingoutput]]\nFull customization of the logging\
    \ output\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n*Available as of Camel 2.11*\n\
    \nWith the options outlined in the link:log.html[#Formatting] section, you\ncan\
    \ control much of the output of the logger. However, log lines will\nalways follow\
    \ this structure:\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------\n\
    Exchange[Id:ID-machine-local-50656-1234567901234-1-2, ExchangePattern:InOut, \n\
    Properties:{CamelToEndpoint=log://org.apache.camel.component.log.TEST?showAll=true,\
    \ \nCamelCreatedTimestamp=Thu Mar 28 00:00:00 WET 2013}, \nHeaders:{breadcrumbId=ID-machine-local-50656-1234567901234-1-1},\
    \ BodyType:String, Body:Hello World, Out: null]\n--------------------------------------------------------------------------------------------------------------\n\
    \nThis format is unsuitable in some cases, perhaps because you need to...\n\n\
    * ... filter the headers and properties that are printed, to strike a\nbalance\
    \ between insight and verbosity.\n* ... adjust the log message to whatever you\
    \ deem most readable.\n* ... tailor log messages for digestion by log mining systems,\
    \ e.g.\nSplunk.\n* ... print specific body types differently.\n* ... etc.\n\n\
    Whenever you require absolute customization, you can create a class that\nimplements\
    \ the\nhttp://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/spi/ExchangeFormatter.html[`ExchangeFormatter`]\n\
    interface. Within the `format(Exchange)` method you have access to the\nfull Exchange,\
    \ so you can select and extract the precise information you\nneed, format it in\
    \ a custom manner and return it. The return value will\nbecome the final log message.\n\
    \nYou can have the Log component pick up your custom `ExchangeFormatter`\nin either\
    \ of two ways:\n\n*Explicitly instantiating the LogComponent in your Registry:*\n\
    \n[source,java]\n---------------------------------------------------------------------\n\
    <bean name=\"log\" class=\"org.apache.camel.component.log.LogComponent\">\n  \
    \ <property name=\"exchangeFormatter\" ref=\"myCustomFormatter\" />\n</bean>\n\
    ---------------------------------------------------------------------\n\n*Convention\
    \ over configuration:*\n\nSimply by registering a bean with the name `logFormatter`;\
    \ the Log\nComponent is intelligent enough to pick it up automatically.\n\n[source,java]\n\
    ----------------------------------------------------------------------\n<bean\
    \ name=\"logFormatter\" class=\"com.xyz.MyCustomExchangeFormatter\" />\n----------------------------------------------------------------------\n\
    \nNOTE: the `ExchangeFormatter` gets applied to *all Log endpoints within\nthat\
    \ Camel Context*. If you need different ExchangeFormatters for\ndifferent endpoints,\
    \ just instantiate the LogComponent as many times as\nneeded, and use the relevant\
    \ bean name as the endpoint prefix.\n\nFrom *Camel 2.11.2/2.12* onwards when using\
    \ a custom log formatter, you\ncan specify parameters in the log uri, which gets\
    \ configured on the\ncustom log formatter. Though when you do that you should\
    \ define the\n\"logFormatter\" as prototype scoped so its not shared if you have\n\
    different parameters, eg:\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
    <bean name=\"logFormatter\" class=\"com.xyz.MyCustomExchangeFormatter\" scope=\"\
    prototype\"/>\n---------------------------------------------------------------------------------------\n\
    \nAnd then we can have Camel routes using the log uri with different\noptions:\n\
    \n[source,java]\n---------------------------------------------\n<to uri=\"log:foo?param1=foo&amp;param2=100\"\
    />\n...\n<to uri=\"log:bar?param1=bar&amp;param2=200\"/>\n---------------------------------------------\n\
    \n[[Log-UsingLogcomponentinOSGi]]\nUsing Log component in OSGi\n+++++++++++++++++++++++++++\n\
    \n*Improvement as of Camel 2.12.4/2.13.1*\n\nWhen using\_Log component inside\
    \ OSGi (e.g., in Karaf), the underlying\nlogging mechanisms are provided by PAX\
    \ logging. It searches for a bundle\nwhich invokes\_`org.slf4j.LoggerFactory.getLogger()`\
    \ method and\nassociates the bundle with the logger instance. Without specifying\n\
    custom\_`org.sfl4j.Logger` instance, the logger created by Log component\nis associated\
    \ with `camel-core` bundle.\n\nIn some scenarios it is required that the bundle\
    \ associated with logger\nshould be the bundle which contains route definition.\
    \ To do this, either\nregister single instance of\_`org.slf4j.Logger` in the Registry\
    \ or\nreference it using\_`logger` URI parameter.\n\n[[Log-SeeAlso]]\nSee Also\n\
    ^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
    * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
    \n* link:tracer.html[Tracer]\n* link:how-do-i-use-log4j.html[How do I use log4j]\n\
    * link:how-do-i-use-java-14-logging.html[How do I use Java 1.4 logging]\n* link:logeip.html[LogEIP]\
    \ for using `log` directly in the DSL for human\nlogs.\n\n"
