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

# This flag must be set on Mac OSX
#derby.storage.fileSyncTransactionLog=true

#When this property is set to true, Derby writes the query plan information 
#into the derby.log file for all executed queries.
#Default: false
#derby.language.logQueryPlan=true

#When this property is set to true, Derby writes the text and parameter values 
#of all executed statements to the information log at the beginning of 
#execution. It also writes information about commits and rollbacks. 
#Information includes the time and thread number.
#Default: false
#derby.language.logStatementText=true

#Specifies name of the file to which the error log is written. 
#If the file name is relative, it is taken as relative to the system directory.
#If this property is set, the derby.stream.error.method and 
#derby.stream.error.field properties are ignored.
#Default: derby.log
derby.stream.error.file=../../logs/database/derby.txt

#Specifies which errors are logged to the Derby error log 
#(typically the derby.log file). In test environments, use the setting 
#derby.stream.error.logSeverityLevel=0 so that all problems are reported.
#Any error raised in a Derby system is given a level of severity. 
#This property indicates the minimum severity necessary for an error to appear 
#in the error log. The severities are defined in the class 
#org.apache.derby.types.ExceptionSeverity. 
#The higher the number, the more severe the error.
#20000: Errors that cause the statement to be rolled back, 
#for example syntax errors and constraint violations.
#30000: Errors that cause the transaction to be rolled back, 
#for example deadlocks.
#40000: Errors that cause the connection to be closed.
#50000: Errors that shut down the Derby system.
#Default: 40000
#derby.stream.error.logSeverityLevel=0

#Specifies whether to append to or destroy and re-create the derby.log file, 
#which is used to record error and other information 
#when Derby starts up in a JVM.
#You can set this property even if the file does not yet exist; 
#Derby creates the file.
#Default: false
derby.infolog.append=true
