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

log4j.rootLogger=INFO, file

# -----------------------------------------------------------------------------
# Console (use 'console')
# -----------------------------------------------------------------------------
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %-60c %x - %m%n

# -----------------------------------------------------------------------------
# File (use 'file')
# -----------------------------------------------------------------------------
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.file=${log.dir}/mvn-${mvn.forkNumber}.log
log4j.appender.file.append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %-60c %x - %m%n

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

# Log a bit when running the flink-yarn-tests to avoid running into the 5 minutes timeout for
# the tests
log4j.logger.org.apache.flink.yarn.YARNSessionFIFOITCase=INFO, console
log4j.logger.org.apache.flink.yarn.YARNSessionCapacitySchedulerITCase=INFO, console
log4j.logger.org.apache.flink.streaming.connectors.kafka=INFO, console
log4j.logger.org.I0Itec.zkclient=INFO, console
log4j.logger.org.apache.flink.streaming.connectors.kafka.internals.SimpleConsumerThread=OFF
