<?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>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="[%t] %c{1} [%p] %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="STDOUT"/>
    </Root>

    <Logger name="STARTUP_LOGGER" level="info" additivity="false">
      <AppenderRef ref="STDOUT"/>
    </Logger>

    <Logger name="org.apache.hadoop" level="error"></Logger>

    <Logger name="org.I0Itec.zkclient" level="error"></Logger>

    <Logger name="org.apache.zookeeper" level="error"></Logger>

    <Logger name="org.apache.samza.system.kafka" level="error"></Logger>

    <Logger name="org.apache.kafka" level="error"></Logger>

    <Logger name="kafka" level="error"></Logger>

  </Loggers>
</Configuration>