<?xml version="1.0" encoding="UTF-8"?>
<!--
 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 status="OFF" name="RoutingTest">
  <Properties>
    <Property name="filename-idle">target/routing-purge-idle/routingtest-$${sd:id}.log</Property>
    <Property name="filename-manual">target/routing-purge-manual/routingtest-$${sd:id}.log</Property>
  </Properties>
  <ThresholdFilter level="debug"/>

  <Appenders>
    <Console name="STDOUT">
      <PatternLayout pattern="%m%n"/>
    </Console>
    <List name="List">
      <ThresholdFilter level="debug"/>
    </List>
    <List name="ReferencedList"/>
    <Routing name="RoutingPurgeIdle">
      <Routes pattern="$${sd:id}">
        <Route>
          <File name="Routing-${sd:id}" fileName="${filename-idle}">
            <PatternLayout>
              <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
            </PatternLayout>
          </File>
        </Route>
        <Route ref="ReferencedList" key="2"/>
      </Routes>
      <IdlePurgePolicy timeToLive="2" timeUnit="seconds" />
    </Routing>

    <Routing name="RoutingPurgeIdleWithHangingAppender">
      <Routes pattern="$${sd:id}">
        <Route>
          <Hanging name="Routing-${sd:id}" shutdownDelay="10000"/>
        </Route>
        <Route ref="ReferencedList" key="2"/>
      </Routes>
      <IdlePurgePolicy timeToLive="2" timeUnit="seconds" />
    </Routing>

    <Routing name="RoutingPurgeManual">
      <Routes pattern="$${sd:id}">
        <Route>
          <File name="Routing-${sd:id}" fileName="${filename-manual}">
            <PatternLayout>
              <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
            </PatternLayout>
          </File>
        </Route>
        <Route ref="ReferencedList" key="2"/>
      </Routes>
    </Routing>
  </Appenders>

  <Loggers>
    <Logger name="EventLogger" level="info" additivity="false">
      <AppenderRef ref="RoutingPurgeIdle"/>
      <AppenderRef ref="RoutingPurgeIdleWithHangingAppender"/>
      <AppenderRef ref="RoutingPurgeManual"/>
      <AppenderRef ref="List"/>
    </Logger>

    <Root level="error">
      <AppenderRef ref="STDOUT"/>
    </Root>
  </Loggers>

</Configuration>
