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

name=ActiveMQInteropModuleTestPropertiesConfig
status=warn

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=%d [%-15.15t] - %-5p %-30.30c{1} - %m%n

rootLogger.level=info
rootLogger.appenderRef.console.ref=STDOUT

logger.jms.name=org.apache.qpid.jms
logger.jms.level=debug

logger.provider.name=org.apache.qpid.jms.provider
logger.provider.level=trace

logger.jmsframes.name=org.apache.qpid.jms.provider.amqp.FRAMES
logger.jmsframes.level=info

logger.activemq.name=org.apache.activemq
logger.activemq.level=info

logger.broker.name=org.apache.activemq.broker
logger.broker.level=info

logger.ws.name=org.apache.activemq.transport.ws
logger.ws.level=debug

logger.amqp.name=org.apache.activemq.transport.amqp
logger.amqp.level=debug

logger.frames.name=org.apache.activemq.transport.amqp.FRAMES
logger.frames.level=info
