#
# Copyright 2005 The Apache Software Foundation.
# 
# Licensed 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 a sample properties file to configure apache commons logging SimpleLog
# implementation for the JDO2 Implementation (Enhancer) sources. 
# Below you find an entry for each of the source logger instances. 
# Please uncomment the line and adapt the log level to your needs, 
# in case to want to enable a particular logger.
#

######################
# Enhancer source logger
######################

######################
# Dependent projects
######################

# Utility class logger
#org.apache.commons.logging.simplelog.log.org.apache.jdo.util = debug
# JDOModel logger
#org.apache.commons.logging.simplelog.log.org.apache.jdo.impl.model.jdo = debug
# XML parser logger
#org.apache.commons.logging.simplelog.log.org.apache.jdo.impl.model.jdo.xml = debug

######################
# Default logging level
######################

org.apache.commons.logging.simplelog.defaultlog = error
