#
# 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.
#

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=DEBUG, CONSOLE
#log4j.rootCategory=DEBUG, CONSOLE, LOGFILE
#log4j.rootCategory=DEBUG, LOGFILE
log4j.rootCategory=ERROR, CONSOLE

# Set selected logging
# (You might want to do this to cut down on the size of the file)
# The example below adds debug trace for StAXUtils or jaxws server to 
# the axis2.small.log.
# You can add this without changing the root category.
#log4j.category.org.apache.axiom.om.util.StAXUtils=DEBUG, SMALL
#log4j.category.org.apache.axis2.jaxws.message.databinding.JAXBUtils=DEBUG, SMALL

# Enable the following to get JAXWS TestLogger trace.
#log4j.category.JAXWS-Tests=DEBUG, SMALL

# Set the enterprise logger priority to FATAL
log4j.logger.org.apache.axis2.enterprise=FATAL
log4j.logger.de.hunsicker.jalopy.io=FATAL
log4j.logger.httpclient.wire.header=FATAL
log4j.logger.org.apache.commons.httpclient=FATAL


# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %c - %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis2.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n

# SMALL is set to be a File appender using a PatternLayout.
log4j.appender.SMALL=org.apache.log4j.FileAppender
log4j.appender.SMALL.File=axis2.small.log
log4j.appender.SMALL.Append=true
log4j.appender.SMALL.layout=org.apache.log4j.PatternLayout
log4j.appender.SMALL.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n