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

rootLogger.level = INFO
rootLogger.appenderRef.out.ref = FileAppender

# -----------------------------------------------------------------------------
# Console (use 'console')
# -----------------------------------------------------------------------------

appender.console.name = ConsoleAppender
appender.console.type = CONSOLE
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{HH:mm:ss,SSS} [%20t] %-5p %-60c %x - %m%n

# -----------------------------------------------------------------------------
# File (use 'file')
# -----------------------------------------------------------------------------
appender.file.name = FileAppender
appender.file.type = FILE
appender.file.fileName = ${sys:log.dir}/mvn-${sys:mvn.forkNumber}.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = %d{HH:mm:ss,SSS} [%20t] %-5p %-60c %x - %m%n

# suppress the irrelevant (wrong) warnings from the netty channel handler
logger.netty.name = org.jboss.netty.channel.DefaultChannelPipeline
logger.netty.level = ERROR
logger.zookeeper.name = org.apache.zookeeper
logger.zookeeper.level = ERROR
logger.shaded_zookeeper.name = org.apache.flink.shaded.zookeeper3
logger.shaded_zookeeper.level = ERROR
logger.zkquorum.name = org.apache.zookeeper.server.quorum.QuorumCnxManager
logger.zkquorum.level = OFF
logger.leaderretrieval.name = org.apache.flink.runtime.leaderretrieval
logger.leaderretrieval.level = DEBUG
logger.leaderelection.name = org.apache.flink.runtime.leaderelection
logger.leaderelection.level = DEBUG

# Log a bit when running the flink-yarn-tests to avoid running into the 5 minutes timeout for
# the tests
logger.yarn1.name = org.apache.flink.yarn.YARNSessionFIFOITCase
logger.yarn1.level = INFO
logger.yarn1.appenderRef.out.ref = ConsoleAppender
logger.yarn2.name = org.apache.flink.yarn.YARNSessionCapacitySchedulerITCase
logger.yarn2.level = INFO
logger.yarn2.appenderRef.out.ref = ConsoleAppender

# YARN's cache cleanup is generating log output on a regular basis which prevents tools/ci/test_controller.sh's
# watchdog mechanism to kick in in case of a timeout. Disabling this regular log message helps detecting timeouts.
logger.yarn3.name = org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService
logger.yarn3.level = WARN
