<?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="ERROR">

  <Appenders>
    <Console name="STDOUT">
      <PatternLayout pattern="%C{1.} %m %level MDC%X%n"/>
    </Console>
    <Jdbc name="databaseAppender" tableName="dsMappingLogEntry" ignoreExceptions="false">
      <DriverManager connectionString="jdbc:h2:${sys:java.io.tmpdir}/h2/test_log4j;TRACE_LEVEL_SYSTEM_OUT=0" userName="sa" password="" />
      <ColumnMapping name="level" pattern="%level" />
      <ColumnMapping name="logger" pattern="%logger" />
      <ColumnMapping name="message" literal="'Hello World!'" />
      <ColumnMapping name="exception" pattern="%ex{full}" />
    </Jdbc>
  </Appenders>

  <Loggers>
    <Logger name="org.apache.logging.log4j.jdbc.appender.JdbcAppenderColumnMappingLiteralTest" level="DEBUG" additivity="false">
      <AppenderRef ref="databaseAppender" />
    </Logger>

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

</Configuration>
