<?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 name="ConfigTest" status="error" packages="org.apache.logging.log4j.test"
               monitorInterval="5">
  <Appenders>
    <Console name="STDOUT">
      <PatternLayout pattern="%X{Type, Name} %m%n"/>
    </Console>
    <List name="List">
      <PatternLayout pattern="%X{Type, Name} %m%n"/>
    </List>
    <Routing name="Routing">
      <Routes pattern="$${ctx:Type}">
        <Route ref="STDOUT"/>
        <Route ref="STDOUT" key="Audit"/>
        <Route ref="List" key="Service"/>
      </Routes>
    </Routing>
  </Appenders>
  <Loggers>
    <Logger name="org.apache.test.logging" level="debug" additivity="false">
      <AppenderRef ref="Routing"/>
    </Logger>
    <Logger name="org.apache.test" level="trace" additivity="false">
      <AppenderRef ref="List"/>
    </Logger>
    <Root level="error">
      <AppenderRef ref="STDOUT"/>
    </Root>
  </Loggers>
</Configuration>