## ---------------------------------------------------------------------------
## Licensed to the Apache Software Foundation (ASF) under one or more
## contributor license agreements.  See the NOTICE file distributed with
## this work for additional information regarding copyright ownership.
## The ASF licenses this file to You under the Apache License, Version 2.0
## (the "License"); you may not use this file except in compliance with
## the License.  You may obtain a copy of the License at
##
##      http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------

debug = false

logging.level.org.springframework = INFO
logging.level.org.apache.camel.spring.boot = INFO
logging.level.org.apache.camel.impl = INFO
logging.level.org.apache.camel.impl.engine.DefaultSupervisingRouteController = DEBUG
logging.level.org.apache.camel.util.backoff = DEBUG
logging.level.sample.camel = DEBUG

# expose actuator endpoint via HTTP
management.endpoints.web.exposure.include=info,health
management.endpoint.health.enabled = true

# show verbose health details (/actuator/health) so you can see Camel information also
management.endpoint.health.show-details=always

# to turn off Camel info in (/actuator/info)
management.info.camel.enabled=true
management.info.camel.verbose=true

# the name of Camel
camel.springboot.name = SampleSupervisingRouteController

# route controller configuration
camel.springboot.routeControllerSuperviseEnabled = true
camel.springboot.routeControllerInitialDelay = 5000
camel.springboot.routeControllerBackoffDelay = 5000
camel.springboot.routeControllerBackoffMaxAttempts = 10
