#
# 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.
#


# This is the logging properties that goes to the war, there are two logging conf kept at the 
# svn, one for developement (one at src/test-resources) and other for producation
 
# Uncomment the next line to disable all logging.
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog

# Uncomment the next line to enable the simple log based logging
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog

# Uncomment the next line to enable log4j based logging
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
