# 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 logging properties file is used during unit testing.

# Log levels: OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL

# Specify which handlers are to be used
handlers = java.util.logging.ConsoleHandler

# Logging level for the root logger
.level = FINE

# Logging level for new ConsoleHandler instances
java.util.logging.ConsoleHandler.level = FINE

# Formatter for new ConsoleHandler instances
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# CAS-Product settings
org.apache.oodt.cas.product.level = FINE

# File manager settings
org.apache.oodt.cas.filemgr.level = SEVERE

# XMLRPC commons-httpclient transport layer settings
org.apache.commons.httpclient.level = WARNING
httpclient.wire.level = WARNING

# Apache CXF settings
org.apache.cxf.level = WARNING

# JAXB settings
javax.xml.bind.level = WARNING
com.sun.xml.bind.level = WARNING
