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

<!-- Configures logging for fluo-yarn command -->
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="org.apache.fluo" level="debug"/>
  <logger name="org.apache.curator" level="error"/>
  <logger name="org.apache.hadoop" level="info"/>
  <logger name="org.apache.hadoop.yarn.client.RMProxy" level="error"/>
  <logger name="org.apache.twill" level="info"/>
  <logger name="org.apache.twill.yarn.YarnTwillRunnerService" level="error"/>
  <logger name="org.apache.zookeeper" level="error"/>

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