<!--
  ============LICENSE_START=======================================================
  ONAP SO
  ================================================================================
  Copyright (C) 2018 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=========================================================
  -->

<configuration>
	<property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}"/>
    <property name="p_lvl" value="%level"/>
    <property name="p_log" value="%logger"/>
    <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}"/>
    <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}"/>
    <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}"/>
    <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}"/>
    <property name="p_thr" value="%thread"/>
    <property name="pattern" value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n"/>


	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${pattern}</pattern>
		</encoder>
	</appender>

	<appender name="test"
		class="org.onap.so.utils.TestAppender" />

	<logger name="com.att.ecomp.audit" level="info" additivity="false">
		<appender-ref ref="STDOUT" />
	</logger>

	<logger name="com.att.eelf.metrics" level="info" additivity="false">
		<appender-ref ref="STDOUT" />
	</logger>

	<logger name="com.att.eelf.error" level="WARN" additivity="false">
		<appender-ref ref="STDOUT" />
	</logger>

	<logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="test" />
	</logger>
	
	<logger name="org.flywaydb" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>
	

	<logger name="ch.vorburger" level="WARN" additivity="false">
		<appender-ref ref="STDOUT" />
	</logger>
	

	<root level="WARN">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="test" />
	</root>


</configuration>