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

# Set root logger level to ERROR.
# set manually to INFO for debugging purposes.
log4j.rootLogger=ERROR, testlogger

# ConsoleAppender.
log4j.appender.testlogger=org.apache.log4j.ConsoleAppender
log4j.appender.testlogger.target = System.err
log4j.appender.testlogger.layout=org.apache.log4j.PatternLayout
log4j.appender.testlogger.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n

# TestSparkRunner prints general information about test pipelines execution.
log4j.logger.org.apache.beam.runners.spark.TestSparkRunner=INFO

# in case of an emergency - uncomment (or better yet, stay calm and uncomment).
#log4j.logger.org.apache.beam=TRACE
#log4j.logger.org.apache.beam.sdk.Pipeline=INFO
#log4j.logger.org.apache.beam.sdk.coders=INFO
#log4j.logger.org.apache.beam.sdk.runners.TransformHierarchy=ERROR
#log4j.logger.org.apache.beam.runners.spark.SparkRunner$Evaluator=ERROR
#log4j.logger.org.apache.beam.runners.spark.translation.streaming.WatermarkSyncedDStream#compute=INFO
#log4j.logger.org.apache.beam.runners.spark.translation.streaming.WatermarkSyncedDStream=ERROR
