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

#
# This file controls most of the logging in ActiveMQ which is mainly based around
# the commons logging API.
#
rootLogger.level=INFO
rootLogger.appenderRef.console.ref=Console
rootLogger.appenderRef.console.filter.threshold.type=ThresholdFilter
rootLogger.appenderRef.console.filter.threshold.level=INFO

logger.spring.name=org.apache.activemq.spring
logger.spring.level=WARN

logger.handler.name=org.apache.activemq.web.handler
logger.handler.level=WARN

logger.springframework.name=org.springframework
logger.springframework.level=WARN

logger.xbean.name=org.apache.xbean
logger.xbean.level=WARN

logger.camel.name=org.apache.camel
logger.camel.level=INFO

logger.jetty.name=org.eclipse.jetty
logger.jetty.level=WARN

# When debugging or reporting problems to the ActiveMQ team,
# comment out the above lines and uncomment the next.

#rootLogger.level=DEBUG

# Or for more fine grained debug logging uncomment one of these
#logger.activemq.name=org.apache.activemq
#logger.activemq.level=DEBUG
#logger.camel.name=org.apache.camel
#logger.camel.level=DEBUG

# Console appender
appender.console.type=Console
appender.console.name=Console
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=%5p | %m%n