#
# 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 (Query) 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
#

######################
# Query source logger
######################

# JDOQL query logger
#org.apache.jdo.impl.jdoql.level = FINE
# JDOQL query compiler logger
#org.apache.jdo.impl.jdoql.jdoqlc.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
# 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

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

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