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

#    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. See accompanying LICENSE file.
#

log4j.appender.oozie=org.apache.log4j.FileAppender
log4j.appender.oozie.File=${oozielocal.log}
log4j.appender.oozie.Append=true
log4j.appender.oozie.layout=org.apache.log4j.PatternLayout
log4j.appender.oozie.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n

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

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

log4j.logger.org.apache.oozie=DEBUG, none
log4j.logger.org.apache.oozie.local=DEBUG, none
log4j.logger.org.apache.oozie.client=DEBUG, none
log4j.logger.org.apache.oozie.oozie=DEBUG, none
log4j.logger.org.apache.oozie.action=DEBUG, none
log4j.logger.org.apache.oozie.command=DEBUG, none
log4j.logger.org.apache.oozie.wf.service=INFO, none
log4j.logger.org.apache.oozie.wf.servlet=INFO, none
log4j.logger.org.apache.oozie.store=DEBUG, none
log4j.logger.org.apache.oozie.workflow=INFO, none
log4j.logger.org.apache.oozie.service=INFO, none
log4j.logger.org.apache.oozie.servlet=INFO, none
log4j.logger.org.apache.hadoop=INFO, none
log4j.logger.org.mortbay=INFO, none
log4j.logger.org.hsqldb=INFO, none


