## ---------------------------------------------------------------------------
## 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.
## ---------------------------------------------------------------------------

#
# The logging properties used during tests..
#
log4j.rootLogger=INFO, file

#log4j.logger.org.apache.camel.impl.converter=WARN
log4j.logger.org.apache.camel.management=WARN
log4j.logger.org.apache.camel.impl.DefaultPackageScanClassResolver=WARN
#log4j.logger.org.apache.camel.impl.converter.DefaultTypeConverter=TRACE
#log4j.logger.org.apache.camel.impl.converter.PropertyEditorTypeConverter=TRACE
#log4j.logger.org.apache.camel.impl.converter=DEBUG

#log4j.logger.org.apache.camel=DEBUG
#log4j.logger.org.apache.camel.language.simple=TRACE
#log4j.logger.org.apache.camel.component=TRACE
#log4j.logger.org.apache.camel.component.seda=TRACE
#log4j.logger.org.apache.camel.component.file=TRACE
#log4j.logger.org.apache.camel.impl.DefaultUnitOfWork=TRACE
#log4j.logger.org.apache.camel.component.mock=DEBUG
#log4j.logger.org.apache.camel.component.file=TRACE
#log4j.logger.org.apache.camel.processor.DefaultErrorHandler=TRACE
#log4j.logger.org.apache.camel.processor.Pipeline=TRACE
#log4j.logger.org.apache.camel.processor.MulticastProcessor=TRACE
#log4j.logger.org.apache.camel.processor.RecipientList=TRACE
#log4j.logger.org.apache.camel.processor.RecipientListProcessor=TRACE
#log4j.logger.org.apache.camel.processor.RoutingSlip=TRACE
#log4j.logger.org.apache.camel.processor.TryProcessor=TRACE
#log4j.logger.org.apache.camel.processor.loadbalancer=TRACE
#log4j.logger.org.apache.camel.processor.Delayer=TRACE
#log4j.logger.org.apache.camel.processor.Throttler=TRACE
#log4j.logger.org.apache.camel.processor.aggregate.AggregateProcessor=DEBUG
#log4j.logger.org.apache.camel.impl=TRACE
#log4j.logger.org.apache.camel.util.FileUtil=TRACE
#log4j.logger.org.apache.camel.util.AsyncProcessorHelper=TRACE
#log4j.logger.org.apache.camel.util.ServiceHelper=TRACE

# CONSOLE appender not used by default
log4j.appender.out=org.apache.log4j.ConsoleAppender
log4j.appender.out.layout=org.apache.log4j.PatternLayout
log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
# MDC
#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %-10.10X{breadcrumbId} - %-10.10X{exchangeId} - %-10.10X{correlationId} - %-10.10X{routeId} - %m%n

# File appender
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.file=target/camel-core-test.log
log4j.appender.file.append=true
log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
# MDC
#log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %-10.10X{breadcrumbId} - %-10.10X{exchangeId} - %-10.10X{correlationId} - %-10.10X{routeId} - %m%n

log4j.throwableRenderer=org.apache.log4j.EnhancedThrowableRenderer