Security Logging Fields

- logback core and encoder dependencies are added.
- New appender is added to log JSON format content on console.

Issue-ID: CPS-986
Signed-off-by: sourabh_sourabh <sourabh.sourabh@est.tech>
Change-Id: Ia72b27f306019fa259b3d6de4c5399f0ae734076
diff --git a/cps-application/src/main/resources/application.yml b/cps-application/src/main/resources/application.yml
index 4dfeee8..263ae6b 100644
--- a/cps-application/src/main/resources/application.yml
+++ b/cps-application/src/main/resources/application.yml
@@ -124,6 +124,7 @@
                 enabled: true

 

 logging:

+    format: json

     level:

         org:

             springframework: INFO

diff --git a/cps-dependencies/pom.xml b/cps-dependencies/pom.xml
index dcbc5f7..73cca23 100755
--- a/cps-dependencies/pom.xml
+++ b/cps-dependencies/pom.xml
@@ -200,6 +200,16 @@
                 <artifactId>mapstruct-processor</artifactId>
                 <version>${mapstruct.version}</version>
             </dependency>
+            <dependency>
+                <groupId>net.logstash.logback</groupId>
+                <artifactId>logstash-logback-encoder</artifactId>
+                <version>7.0.1</version>
+            </dependency>
+            <dependency>
+                <groupId>org.codehaus.janino</groupId>
+                <artifactId>janino</artifactId>
+                <version>3.1.7</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 </project>
diff --git a/cps-service/pom.xml b/cps-service/pom.xml
index aea122d..b9d6268 100644
--- a/cps-service/pom.xml
+++ b/cps-service/pom.xml
@@ -107,6 +107,14 @@
       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-aop</artifactId>

     </dependency>

+    <dependency>

+      <groupId>net.logstash.logback</groupId>

+      <artifactId>logstash-logback-encoder</artifactId>

+    </dependency>

+    <dependency>

+      <groupId>org.codehaus.janino</groupId>

+      <artifactId>janino</artifactId>

+    </dependency>

     <!-- T E S T   D E P E N D E N C I E S -->

     <dependency>

       <groupId>org.codehaus.groovy</groupId>

diff --git a/cps-service/src/main/resources/logback-spring.xml b/cps-service/src/main/resources/logback-spring.xml
index 3bba9f1..ce1af13 100644
--- a/cps-service/src/main/resources/logback-spring.xml
+++ b/cps-service/src/main/resources/logback-spring.xml
@@ -1,6 +1,6 @@
 <!--
  ============LICENSE_START=======================================================
- Copyright (C) 2021 Nordix Foundation
+ Copyright (C) 2021-2022 Nordix Foundation
  ================================================================================
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
@@ -18,65 +18,58 @@
  ============LICENSE_END=========================================================
 -->
 
-<configuration scan="true" debug="false">
-    <include resource="org/springframework/boot/logging/logback/base.xml" />
+<configuration scan="true" scanPeriod="30 seconds" debug="false">
 
-    <property name="queueSize" value="256" />
-    <property name="maxFileSize" value="20MB" />
-    <property name="maxHistory" value="30" />
-    <property name="totalSizeCap" value="20MB" />
+    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
+    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
 
-    <!-- log file names -->
-    <property name="logName" value="cps" />
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+    <springProperty scope="context" name="username" source="security.auth.username"/>
+    <springProperty scope="context" name="loggingFormat" source="logging.format"/>
 
-    <property name="currentTimeStamp" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;,UTC}"/>
+    <property name="currentTimeStamp" value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}"/>
 
-    <property name="debugPattern"
-        value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%thread|%X{RequestID}| %logger{50} - %msg%n" />
+    <appender name="jsonConsole"
+              class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+            <providers>
+                <pattern>
+                    <omitEmptyFields>true</omitEmptyFields>
+                    <pattern>
+                        {
+                        "logTimeStamp": "${currentTimeStamp:-}",
+                        "logTypeName": "",
+                        "logLevel": "%level",
+                        "traceId": "%X{traceId:-}",
+                        "statusCode": "",
+                        "principalId": "${username:-}",
+                        "serviceName": "${springAppName:-}",
+                        "message": "%message",
+                        "spanId": "%X{spanId:-}",
+                        "processId": "${PID:-}",
+                        "threadName": "%thread",
+                        "class": "%logger{40}",
+                        "exception": "%wEx"
+                        }
+                    </pattern>
+                </pattern>
+            </providers>
+        </encoder>
+    </appender>
 
-    <property name="all-log-pattern"
-      value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%thread|%X{RequestID}| %logger{50} - %msg%n" />
-
-    <appender name="CONSOLE"
-      class="ch.qos.logback.core.ConsoleAppender">
-        <layout class="ch.qos.logback.classic.PatternLayout">
-            <Pattern>${all-log-pattern}</Pattern>
-        </layout>
+    <appender name="asyncConsole" class="ch.qos.logback.classic.AsyncAppender">
+        <if condition='property("loggingFormat").equals("json")'>
+            <then>
+                <appender-ref ref="jsonConsole"/>
+            </then>
+            <else>
+                <appender-ref ref="CONSOLE"/>
+            </else>
+        </if>
     </appender>
 
     <root level="INFO">
-        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="asyncConsole"/>
     </root>
 
-<!--  Send logs to File & Rotate File  -->
-<!--    <appender name="Debug"-->
-<!--        class="ch.qos.logback.core.rolling.RollingFileAppender">-->
-<!--        <file>../log/${logName}.log</file>-->
-<!--        <rollingPolicy-->
-<!--            class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
-<!--            <fileNamePattern>${logName}.%d{yyyy-MM-dd}.%i.log.zip-->
-<!--            </fileNamePattern>-->
-<!--            <maxFileSize>${maxFileSize}</maxFileSize>-->
-<!--            <maxHistory>${maxHistory}</maxHistory>-->
-<!--            <totalSizeCap>${totalSizeCap}</totalSizeCap>-->
-<!--        </rollingPolicy>-->
-<!--        <encoder>-->
-<!--            <pattern>${debugPattern}</pattern>-->
-<!--        </encoder>-->
-<!--    </appender>-->
-
-<!--    <appender name="asyncDebug" class="ch.qos.logback.classic.AsyncAppender">-->
-<!--        <queueSize>256</queueSize>-->
-<!--        <appender-ref ref="Debug" />-->
-<!--        <includeCallerData>true</includeCallerData>-->
-<!--    </appender>-->
-
-<!--    <logger name="org.onap.cps" level="DEBUG" additivity="false">-->
-<!--        <appender-ref ref="asyncDebug" />-->
-<!--    </logger>-->
-
-<!--    <root level="INFO">-->
-<!--        <appender-ref ref="asyncDebug" />-->
-<!--    </root>-->
-
 </configuration>