# 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.
log4j.rootCategory=INFO, A1

# A1 -- console
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d %-5p [%c{1}] [%t] [%x] %m%n

# RF --file appender
log4j.appender.RF=org.apache.log4j.RollingFileAppender
log4j.appender.RF.File=server.log
log4j.appender.RF.layout=org.apache.log4j.PatternLayout
log4j.appender.RF.layout.ConversionPattern=%d %-5p [%c{1}] [%t] [%x] %m%n

# WF -- special file for warnings
# log4j.appender.WF=org.apache.log4j.RollingFileAppender
# log4j.appender.WF.File=I:/dev/jakarta-turbine-jcs/src/scripts/warnings.log
# log4j.appender.WF.layout=org.apache.log4j.PatternLayout
# log4j.appender.WF.layout.ConversionPattern=%d [%t] %-5p %c - %m%n


# ################################################################################

log4j.category.test= DEBUG

log4j.category.org.jgroups=WARN

log4j.category.org.apache.commons.jcs=INFO
log4j.category.org.apache.commons.jcs3.engine=INFO
# log4j.category.org.apache.commons.jcs3.acess=WARN,WF
# log4j.category.org.apache.commons.jcs3.engine.control=WARN,WF

# log4j.logger.org.apache.commons.jcs3.engine.memory.shrinking=INFO
# log4j.logger.org.apache.commons.jcs3.auxiliary.disk=INFO
log4j.logger.org.apache.commons.jcs3.auxiliary.disk.indexed=INFO

# log4j.category.org.apache.commons.jcs3.config=WARN,A1

# log4j.category.org.apache.commons.jcs3.auxiliary=INFO
# log4j.category.org.apache.commons.jcs3.auxiliary.disk=WARN,WF
# log4j.category.org.apache.commons.jcs3.auxiliary.lateral=INFO
# log4j.category.org.apache.commons.jcs3.auxiliary.lateral.javagroups=INFO
# log4j.category.org.apache.commons.jcs3.auxiliary.lateral.xmlrpc=INFO
# log4j.category.org.apache.commons.jcs3.auxiliary.remote=INFO
# log4j.category.org.apache.commons.jcs3.auxiliary.remote.RemoteCacheFailoverRunner=INFO
# log4j.category.org.apache.commons.jcs3.auxiliary.remote.RemoteCacheListener=DEBUG
# log4j.category.org.apache.commons.jcs3.auxiliary.remote.RemoteCacheManager=INFO
# log4j.category.org.apache.commons.jcs3.auxiliary.remote.server.RemoteCacheServer=DEBUG
# log4j.category.org.apache.commons.jcs3.auxiliary.remote.server=INFO
# log4j.category.org.apache.commons.jcs3.utils=WARN,WF
# log4j.category.org.apache.commons.jcs3.utils.discovery=DEBUG

log4j.category.org.apache.commons.jcs3.utils=INFO
