#
# 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=DEBUG, test

log4j.appender.test=org.apache.log4j.ConsoleAppender
log4j.appender.test.Target=System.out
log4j.appender.test.layout=org.apache.log4j.PatternLayout
log4j.appender.test.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.none=org.apache.log4j.varia.NullAppender

log4j.logger.oozieops=OFF, none
log4j.logger.oozieinstrumentation=OFF, none
log4j.logger.oozieaudit=OFF, none

log4j.logger.openjpa=INFO, test
log4j.logger.org.apache.openjpa=INFO, test
log4j.logger.org.apache.hadoop=INFO, test
log4j.logger.com.yahoo.hadoop=INFO, test
log4j.logger.org.mortbay=INFO, test
log4j.logger.org.hsqldb=INFO, test
