<!--
  ~ 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">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger{60} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="WARN">
        <appender-ref ref="STDOUT"/>
    </root>

    <!--<logger name="org.apache.flink.runtime.operators.BatchTask" level="OFF"/>-->
    <!--<logger name="org.apache.flink.runtime.client.JobClient" level="OFF"/>-->
    <!--<logger name="org.apache.flink.runtime.taskmanager.Task" level="OFF"/>-->
    <!--<logger name="org.apache.flink.runtime.jobmanager.JobManager" level="OFF"/>-->
    <!--<logger name="org.apache.flink.runtime.taskmanager.TaskManager" level="OFF"/>-->
    <!--<logger name="org.apache.flink.runtime.executiongraph.ExecutionGraph" level="OFF"/>-->
    <!--<logger name="org.apache.flink.runtime.jobmanager.EventCollector" level="OFF"/>-->
</configuration>