# 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.jcs=INFO
log4j.category.org.apache.jcs.engine=INFO
# log4j.category.org.apache.jcs.acess=WARN,WF
# log4j.category.org.apache.jcs.engine.control=WARN,WF

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

# log4j.category.org.apache.jcs.config=WARN,A1

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

log4j.category.org.apache.jcs.utils=INFO
