# ***************************************************************************************************************************
# * 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.                                              *
# ***************************************************************************************************************************

saveConfigAction = RESTART_SERVER

[Jetty]
config = files/jetty.xml
resolveVars = true
port = 10001,0,0,0

[REST]

staticFiles = htdocs:htdocs

[Logging]
logDir = $S{user.dir}/target/logs
logFile = test.%g.log
dateFormat = yyyy.MM.dd hh:mm:ss
format = [{date} {level}] {msg}%n
append = false
limit = 10M
count = 5
levels = 
	{ 
		'':'WARNING', 
		org.apache.juneau: 'WARNING', 
		org.eclipse.jetty: 'FINEST' 
	}
useStackTraceHashes = true
consoleLevel = WARNING
fileLevel = FINEST

[Test]
int1 = 1
int2 = [1,2,3]
int3 = $C{Test/int1,-1}
int4 = $C{Test/int3,-1}
int5 = $C{XXX,-1}
boolean1 = true
boolean2 = [true,true]
testManifestEntry = $MF{Test-Entry}

[SystemProperties]
org.eclipse.jetty.util.log.class = org.apache.juneau.microservice.jetty.JettyLogger
org.eclipse.jetty.LEVEL = ALL
derby.stream.error.file = $C{Logging/logDir}/derby-errors.log