#
# 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 standard JDK 1.4 logging 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.
#
# The following describes the mapping between the log level of JDK 1.4 logging
# and apache commns logging:
#   JDK 1.4        Apache 
#   FINEST         trace 
#   FINE, FINER    debug 
#   INFO, CONFIG   info
#   WARNING        warn
#   SEVERE         error, fatal
#

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

# PM and PMF logger
#org.apache.jdo.impl.pm.level = FINE
# SCO logger
#org.apache.jdo.impl.sco.level = FINE
# StateManager logger
#org.apache.jdo.impl.state.level = FINE
# Generic StoreManager logger
#org.apache.jdo.store.level = FINE

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

# Utility class logger
#org.apache.jdo.util.level = FINE
# JDOModel logger
#org.apache.jdo.impl.model.jdo.level = FINE
# XML parser logger
#org.apache.jdo.impl.model.jdo.xml.level = FINE

######################
# JDK 1.4 logging properties
######################

handlers = java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level = FINEST
