#
# 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 a sample properties file to configure standard JDK 1.4 logging 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.
#
# 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
#

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

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