# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE.txt 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.    


# Specify the handlers to create in the root logger
# (all loggers are children of the root logger)
# The following creates two handlers
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler

# Set the default logging level for the root logger
.level = ALL
    
# Set the default logging level for new ConsoleHandler instances
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.FileHandler.level = ALL
        
# Set the default formatter for new ConsoleHandler instances
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = ../logs/cas_crawler%g.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 5
java.util.logging.FileHandler.append = true
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
    
# Set the default logging level for the subsystems

org.apache.oodt.cas.crawl.level = ALL

org.apache.oodt.cas.crawl.action.level = ALL

org.apache.oodt.cas.crawl.typedetection.level = ALL

org.apache.oodt.cas.crawl.util.level = ALL

org.apache.oodt.cas.crawl.config.level = ALL

# control the underlying commons-httpclient transport layer for xmlrpc 
org.apache.commons.httpclient.level = INFO
httpclient.wire.header.level = INFO
httpclient.wire.level = INFO

org.springframework.beans.level = SEVERE
org.springframework.core.level = SEVERE
org.springframework.level = SEVERE
org.springframework.beans.factory.level = SEVERE
org.springframework.beans.factory.config.level = SEVERE
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.level = SEVERE
org.apache.oodt.cas.crawl.util.CasPropertyPlaceholderConfigurer.level = SEVERE
sun.net.level = SEVERE
