<?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.
-->
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
    xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
          value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <!-- Kafka configuration configs are loud. -->
    <logger name="org.apache.kafka.streams.StreamsConfig">
        <level value="OFF"/>
    </logger>
    <logger name="org.apache.kafka.clients.consumer.ConsumerConfig">
        <level value="OFF"/>
    </logger>
    <logger name="org.apache.kafka.clients.producer.ProducerConfig">
        <level value="OFF"/>
    </logger>

    <!-- Change this level to DEBUG to see more information about what the 
         QueryManager is doing. -->
    <logger name="org.apache.rya.streams.querymanager.QueryManager">
        <level value="INFO"/>
    </logger>

    <root>
        <level value="INFO" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>