<!--
  ============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>

  <logger name="org.reflections" level="ERROR" additivity="false">
    <appender-ref ref="STDOUT" />
  </logger>
  
  <logger name="org.reflections" level="ERROR" />

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


</configuration>