###
# ============LICENSE_START=======================================================
# ONAP CLAMP
# ================================================================================
# Copyright (C) 2017 AT&T Intellectual Property. All rights
#                             reserved.
# ================================================================================
# Licensed 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.
# ============LICENSE_END============================================
# ===================================================================
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
###

# If the environment property system_properties_path contains a path to a file  , System properties created using the file. If the environment variable not present, system.properties in the class path is used for system property creation 

com.att.eelf.logging.file=classpath:/logback.xml

# change as per logback.xml path
com.att.eelf.logging.path=./
logging.config=classpath:/logback.xml

com.att.ajsc.app.prop.path=./

#
# JVM SSL/TLS properties
jdk.tls.client.protocols=TLSv1.1,TLSv1.2 
https.protocols=TLSv1.1,TLSv1.2
