<!--
  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>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  
  <logger name="org.apache.fluo" level="info"/>
  <logger name="org.apache.zookeeper" level="error"/>
  <logger name="org.apache.curator" level="error"/>
  <logger name="org.apache.hadoop.util.NativeCodeLoader" level="error"/>
  <logger name="org.apache.hadoop.yarn.client.RMProxy" level="warn"/>
  <logger name="org.apache.twill" level="warn"/>
  <logger name="org.apache.twill.yarn.YarnTwillRunnerService" level="error"/>

  <root level="info">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>
