#
# 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
# 
#     https://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
