#
# 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.

#############################
# TCK loggers and appenders 
#############################

# Root logger
log4j.rootLogger = ERROR, TCK

# TCK logger
log4j.logger.org.apache.jdo.tck = INFO, TCK
log4j.additivity.org.apache.jdo.tck = false 

# SpringFramework loggers 
log4j.logger.org.springframework = ERROR, TCK
log4j.additivity.org.springframework = false 
log4j.logger.org.apache.jdo.tck.pc.company.CompanyModelReader = ERROR, TCK
log4j.logger.org.apache.jdo.tck.pc.mylib.MylibReader = ERROR, TCK

# TCK appenders
log4j.appender.TCK = org.apache.jdo.tck.util.TCKFileAppender
log4j.appender.TCK.File = tck.txt
log4j.appender.TCK.layout = org.apache.log4j.PatternLayout
log4j.appender.TCK.layout.ConversionPattern = %d{HH:mm:ss,SSS} (%t) %-5p [%c] - %m%n

############################################
# JDO vendor specific loggers and appenders 
############################################

#log4j.logger.<vendor> = INFO
#log4j.additivity.<vendor> = false 

#log4j.appender.<VENDOR> = org.apache.jdo.tck.util.TCKFileAppender
#log4j.appender.<VENDOR>.File = <vendor>.txt
#log4j.appender.<VENDOR>.layout = org.apache.log4j.PatternLayout
#log4j.appender.<VENDOR>.layout.ConversionPattern = %d{HH:mm:ss,SSS} (%t) %-5p [%c] - %m%n

###################################
# DataNucleus loggers and appenders 
###################################

# DataNucleus loggers
# For more details on DataNucleus logging see 
# http://www.datanucleus.org/products/accessplatform/logging.html
log4j.logger.DataNucleus = INFO, DataNucleus
log4j.logger.DataNucleus.Enhancer = INFO, DataNucleus
log4j.additivity.DataNucleus = false
#log4j.logger.DataNucleus.JDO = INFO, DataNucleus
#log4j.logger.DataNucleus.Persistence = INFO, DataNucleus
#log4j.logger.DataNucleus.Query = INFO, DataNucleus
#log4j.logger.DataNucleus.Lifecycle = INFO, DataNucleus
#log4j.logger.DataNucleus.Reachability = INFO, DataNucleus
#log4j.logger.DataNucleus.Cache = INFO, DataNucleus
#log4j.logger.DataNucleus.ClassLoading = INFO, DataNucleus
#log4j.logger.DataNucleus.MetaData = DEBUG, DataNucleus
#log4j.logger.DataNucleus.Management = DEBUG, DataNucleus
#log4j.logger.DataNucleus.General = DEBUG, DataNucleus
#log4j.logger.DataNucleus.Connection = DEBUG, DataNucleus
#log4j.logger.DataNucleus.JCA = DEBUG, DataNucleus
#log4j.logger.DataNucleus.Transaction = INFO, DataNucleus
#log4j.logger.DataNucleus.Plugin = INFO, DataNucleus
#log4j.logger.DataNucleus.Store.Poid = INFO, DataNucleus
#log4j.logger.DataNucleus.Datastore = DEBUG, DataNucleus
#log4j.logger.DataNucleus.Datastore.Schema = INFO, DataNucleus
#log4j.logger.DataNucleus.Datastore.Persist = INFO, DataNucleus
#log4j.logger.DataNucleus.Datastore.Retrieve = DEBUG, DataNucleus
#log4j.logger.DataNucleus.SchemaTool = INFO, DataNucleus

# C3P0 loggers
log4j.logger.com.mchange.v2 = INFO, DataNucleus
log4j.additivity.com.mchange.v2 = false 

# DataNucleus appenders
log4j.appender.DataNucleus = org.apache.jdo.tck.util.TCKFileAppender
#log4j.appender.DataNucleus = org.apache.log4j.FileAppender
log4j.appender.DataNucleus.Enhancer.File = datanucleus.txt
log4j.appender.DataNucleus.File = datanucleus.txt
log4j.appender.DataNucleus.layout = org.apache.log4j.PatternLayout
log4j.appender.DataNucleus.layout.ConversionPattern = %d{HH:mm:ss,SSS} (%t) %-5p [%c] - %m%n
