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