.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2020 Huawei Technologies Co., Ltd.

CXF-logging:
=============
It is a logging framework from SO. Here basically we are having 2 interceptors which extends AbstractSoapInterceptor.

SOAPLoggingInInterceptor:
+++++++++++++++++++++++++++

* This interceptor is responsible for Capturing requestId , client ip address , invocation id, service name, instance id, entry timestamp , log timestamp, Elapsed time for each request and update the MDC logger with staus In-progress.

SOAPLoggingOutInterceptor:
++++++++++++++++++++++++++++
* This interceptor is responsible for log timestamp , elapsed time for each request and checks for if there is any exception update the MDC loggers with 500 response code otherwise update the status as completed.


cxf-logging Used By below components of SO:
++++++++++++++++++++++++++++++++++++++++++++
The cxf-logging framework is used by below components of so.

mso-openstack-adapter.
mso-requests-db-adapter.
mso-sdnc-adapter.
mso-infrastructure-bpmn.

cxf-logging dependency for using in other components:
++++++++++++++++++++++++++++++++++++++++++++++++++++++
  
  <dependency>
      <groupId>org.onap.so</groupId>
      <artifactId>cxf-logging</artifactId>
      <version>${project.version}</version>

    </dependency>

pom.xml:
+++++++++
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

  <modelVersion>4.0.0</modelVersion>
  <parent>

    <groupId>org.onap.so</groupId>
    <artifactId>so</artifactId>
    <version>1.6.0-SNAPSHOT</version>

  </parent>
  <name>CXFLogging</name>
  <description>Common CXF Logging Classes</description>
  <dependencies>

    <dependency>

      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-rs-client</artifactId>
      <version>${cxf.version}</version>

    </dependency>

    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-bindings-soap</artifactId>
      <version>${cxf.version}</version>

    </dependency>

    <dependency>

      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http</artifactId>
      <version>${cxf.version}</version>

    </dependency>

    <dependency>

      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>

    </dependency>

    <dependency>

      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-ext</artifactId>

    </dependency>

    <dependency>

      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>

    </dependency>

  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>

      </resource>

      <resource>

        <directory>src/main/java</directory>

        <includes>

          <include>*.java</include>

        </includes>

      </resource>

    </resources>

  </build>

  <artifactId>cxf-logging</artifactId>

</project>

Configuration file:
++++++++++++++++++++
Here we can do configure the logger properties for the cxf-logging.

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

