#
# 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 (Runtime) 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.
#

######################
# Runtime source logger
######################

# PM and PMF logger
#org.apache.commons.logging.simplelog.log.org.apache.jdo.impl.pm = debug
# SCO logger
#org.apache.commons.logging.simplelog.log.org.apache.jdo.impl.sco = debug
# StateManager logger
#org.apache.commons.logging.simplelog.log.org.apache.jdo.impl.state = debug
# Generic StoreManager logger
#org.apache.commons.logging.simplelog.log.org.apache.jdo.store = debug

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