<?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="XMLPerfTest" status="error">
    <Appenders>
        <File name="TestLogfile" fileName="target/testlog4j2.log" immediateFlush="false">
            <PatternLayout>
                <Pattern>%d %5p [%t] %C{1.}.%M:%L %X{transactionId} - %m%n</Pattern>
            </PatternLayout>
        </File>
        <RandomAccessFile name="RandomAccessLogFile" fileName="target/testRandomlog4j2.log" immediateFlush="false">
            <PatternLayout>
                <Pattern>%d %5p [%t] %C{1.}.%M:%L %X{transactionId} - %m%n</Pattern>
            </PatternLayout>
        </RandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="TestRandom" level="debug" additivity="false">
            <AppenderRef ref="RandomAccessLogFile"/>
        </Logger>
        <Root level="debug">
            <AppenderRef ref="TestLogfile"/>
        </Root>
    </Loggers>
</Configuration>