<?xml version="1.0"?>
<!--
    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.
-->
<configuration scan="true" scanPeriod="10 seconds" debug="false">
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <encoder>
            <pattern>%date %-5level [%thread] %logger{10} %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>perftests.log</file>
        <append>false</append>
        <encoder>
            <pattern>%date %-5level [%thread] %logger{10} %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.apache.qpid" level="${qpid.disttest.client.loglevel:-warn}" />
    <logger name="org.apache.qpid.disttest" level="${qpid.disttest.loglevel:-info}" />

    <root level="warn">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>
