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

#
# The logging properties used during tests..
#
#log4j.rootLogger=DEBUG, file
log4j.rootLogger=INFO, file

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=target/test/test.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - %m%n

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - %m%n

log4j.category.org.apache.servicemix.jbi.nmr.flow.seda=INFO
#log4j.category.org.apache.ode.jbi.msgmap=TRACE
#log4j.category.org.apache.ode.jbi.EndpointReferenceContextImpl=DEBUG
#log4j.category.org.apache.ode.bpel=DEBUG
#log4j.category.org.apache.ode.dao.jpa.CorrelatorDAOImpl=TRACE
#log4j.category.org.apache.ode.dao.jpa.MessageDAOImpl=TRACE
log4j.category.httpclient=INFO
log4j.category.httpclient.Wire=INFO
log4j.category.org.apache.ode.jbi.JbiTestBase=INFO
#log4j.category.org.apache.ode.bpel.runtime.SCOPE=DEBUG
#log4j.category.org.apache.ode.bpel.runtime.EH_EVENT=DEBUG
#log4j.category.org.apache.ode.bpel.runtime.EH_ALARM=DEBUG
#log4j.category.org.apache.ode.daohib.bpel.CorrelatorDaoImpl=DEBUG
#log4j.category.org.apache.ode.bpel.elang=DEBUG
#log4j.category.org.apache.ode.bpel.compiler=DEBUG
log4j.category.org.apache.ode.bpel.iapi.BpelEventListener=INFO
log4j.category.org.apache.ode.bpel.engine=INFO
