<?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 debug="true">

    <contextName>qpid-systests</contextName>

    <!-- Logging configuration used for 'systests' modules.  This is named
         logback-test.xml in order that it is found in preference to the logback.xml.  -->

    <define name="receiverPort" class="org.apache.qpid.systest.core.logback.LogbackSocketPortNumberDefiner"/>

    <appender name="RootSiftAppender" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator class="org.apache.qpid.systest.core.logback.LogbackPropertyValueDiscriminator">
            <Key>classQualifiedTestName</Key>
            <DefaultValue>testrun</DefaultValue>
        </discriminator>
        <sift>
            <appender name="FILE-${classQualifiedTestName}" class="ch.qos.logback.core.FileAppender">
                <File>${qpid.systest.logback.logs_dir}${file.separator}TEST-${classQualifiedTestName}.txt</File>
                <Append>False</Append>
                <encoder>
                    <!-- origin identifies the broker, valuable when the test involves multiple brokers -->
                    <pattern>%date %-8X{origin} %-5level [%thread] %logger{10} %msg%n</pattern>
                </encoder>
            </appender>
        </sift>
    </appender>
    <!-- Used to receive the log output from spawned brokers so this log is a consolidated one. -->
    <receiver class="ch.qos.logback.classic.net.server.ServerSocketReceiver">
        <port>${receiverPort}</port>
    </receiver>
    <logger name="qpid.message" level="info" />
    <logger name="qpid.statistics" level="info" />
    <logger name="org.apache.qpid" level="debug" />
    <logger name="org.apache.qpid.jms.provider.amqp.FRAMES" level="trace"/>
    <root level="warn">
        <appender-ref ref="RootSiftAppender"/>
    </root>
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
</configuration>
