#
# 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.
#

# ---------------------------------------------------
# The configuration below is good for standalone
# scenarios.  There's a log file and everything is
# time stamped and settings are slightly more verbose.
#
# For embedded scenarios the commented out configuration
# below is a much better fit.
#
log4j.rootLogger = fatal,R

log4j.category.OpenEJB             = warn,R
log4j.category.OpenEJB.options     = info
log4j.category.OpenEJB.server      = info
log4j.category.OpenEJB.startup     = info
log4j.category.OpenEJB.startup.service = info
log4j.category.OpenEJB.startup.config = info
log4j.category.OpenEJB.hsql        = info
log4j.category.OpenEJB.ws          = info
log4j.category.OpenEJB.rs          = info
log4j.category.OpenEJB.tomcat      = info
log4j.category.CORBA-Adapter       = error,R
log4j.category.Transaction         = warn,TX
log4j.category.org.apache.activemq = error,R
log4j.category.org.apache.geronimo = error,R
log4j.category.openjpa             = error,R
log4j.category.axis                = info,R
log4j.category.axis2               = info,R
log4j.category.cxf                 = info,R
log4j.category.org.apache.cxf      = info,R

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.MaxFileSize=1000KB
log4j.appender.R.MaxBackupIndex=7
log4j.appender.R.File=logs/openejb.log
log4j.appender.R.layout.ConversionPattern=%d - %-5p - %m%n

log4j.appender.TX=org.apache.log4j.RollingFileAppender
log4j.appender.TX.layout=org.apache.log4j.PatternLayout
log4j.appender.TX.MaxFileSize=1000KB
log4j.appender.TX.MaxBackupIndex=100
log4j.appender.TX.File=logs/transaction.log
log4j.appender.TX.layout.ConversionPattern=%d - %-5p - %m%n


## ---------------------------------------------------
## Nice alternate configuration for embedded testing
##
## Output is slightly more terse and sent to System.out
##
## Simply comment out the above declarations and
## uncomment the configuration below.
##
#
#log4j.rootLogger                   = fatal,C
#log4j.category.OpenEJB             = warn
#log4j.category.OpenEJB.options     = info
#log4j.category.OpenEJB.server      = info
#log4j.category.OpenEJB.startup     = info
#log4j.category.OpenEJB.startup.service = warn
#log4j.category.OpenEJB.startup.config = info
#log4j.category.OpenEJB.hsql        = info
#log4j.category.CORBA-Adapter       = info
#log4j.category.Transaction         = warn
#log4j.category.org.apache.activemq = error
#log4j.category.org.apache.geronimo = error
#log4j.category.openjpa             = error
#
#log4j.appender.C                           = org.apache.log4j.ConsoleAppender
#log4j.appender.C.layout                    = org.apache.log4j.SimpleLayout
