#
# 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
# 
#     https://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 JDO TCK test cases. Below you find an entry for each of the JDO TCK
# 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
#

#############################
# TCK loggers and appenders 
#############################

# Root logger
.level = SEVERE

# TCK logger
org.apache.jdo.tck.level = INFO

# SpringFramework loggers 
org.springframework.level = SEVERE
org.apache.jdo.tck.pc.company.CompanyModelReader.level = SEVERE
org.apache.jdo.tck.pc.mylib.MylibReader = SEVERE

org.apache.jdo.tck.util.TCKFileHandler.fileName = tck.txt
org.apache.jdo.tck.util.TCKFileHandler.level = FINEST

##############################
# JDO vendor specific loggers 
##############################

#<vendor> = INFO

######################
# Default handlers
######################

handlers = org.apache.jdo.tck.util.TCKFileHandler
