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

# -----------------------------------------------------------------------------
# ZooKeeper-related logs should end up here
# -----------------------------------------------------------------------------
appender.zk_server.name = ZooKeeperServerAppender
appender.zk_server.type = FILE
appender.zk_server.fileName = ${sys:log.dir}/zookeeper-server-${sys:mvn.forkNumber}.log
appender.zk_server.layout.type = PatternLayout
appender.zk_server.layout.pattern = %d{HH:mm:ss,SSS} [%20t] %-5p %-60c %x - %m%n

appender.zk_client.name = ZooKeeperClientAppender
appender.zk_client.type = FILE
appender.zk_client.fileName = ${sys:log.dir}/zookeeper-client-${sys:mvn.forkNumber}.log
appender.zk_client.layout.type = PatternLayout
appender.zk_client.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

# collecting ZooKeeper-related logs in separate log file
logger.zookeeper.name = org.apache.zookeeper
logger.zookeeper.level = INFO
logger.zookeeper.additivity = false
logger.zookeeper.appenderRef.zk.ref = ZooKeeperServerAppender
# FinalRequestProcessor in DEBUG mode enables us to see requests being processed by the ZK server
logger.zookeeper_FinalRequestProcessor.name = org.apache.zookeeper.server.FinalRequestProcessor
logger.zookeeper_FinalRequestProcessor.level = DEBUG
logger.zookeeper_FinalRequestProcessor.additivity = false
logger.zookeeper_FinalRequestProcessor.appenderRef.zk.ref = ZooKeeperServerAppender
logger.shaded_zookeeper.name = org.apache.flink.shaded.zookeeper3
logger.shaded_zookeeper.level = INFO
logger.shaded_zookeeper.additivity = false
logger.shaded_zookeeper.appenderRef.zk.ref = ZooKeeperClientAppender

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
