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

# batchmgr subsystem
org.apache.oodt.cas.resource.batchmgr.level = INFO

# monitor subsystem
org.apache.oodt.cas.resource.monitor.level = INFO

# jobqueue subsystem
org.apache.oodt.cas.resource.jobqueue.level = INFO

# scheduler subsystem
org.apache.oodt.cas.resource.scheduler.level = INFO

# system subsystem
org.apache.oodt.cas.resource.system.level = FINE

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

# spring framework logging
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
