log format changes from patter log to json format 13/141113/1 1.13.5
authorranjan.kumar@t-systems.com <ranjan.kumar@t-systems.com>
Wed, 4 Jun 2025 09:44:39 +0000 (11:44 +0200)
committerranjan.kumar@t-systems.com <ranjan.kumar@t-systems.com>
Wed, 4 Jun 2025 10:08:58 +0000 (12:08 +0200)
Issue-ID: AAI-4170
Change-Id: I927488b8ece909e7d887c6dc6b96bd40ddade8a2
Signed-off-by: ranjan.kumar@t-systems.com <ranjan.kumar@t-systems.com>
pom.xml
src/main/resources/logback.xml

diff --git a/pom.xml b/pom.xml
index 9623904..c4780e0 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                        <version>1.18.32</version>
                        <scope>provided</scope>
                </dependency>
+               <dependency>
+                       <groupId>net.logstash.logback</groupId>
+                       <artifactId>logstash-logback-encoder</artifactId>
+                       <version>6.6</version>
+               </dependency>
        </dependencies>
        <dependencyManagement>
                <dependencies>
index 98c626b..d0bf65d 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 -->
-<!DOCTYPE xml>
-<!--
-This is default logging config which will be used before Spring Boot is initialized
-To find main logging config please check `logging.config` in the application.properties
--->
 <configuration scan="true" scanPeriod="30 seconds" debug="true">
-  <include resource="org/springframework/boot/logging/logback/base.xml" />
-
-  <property name="componentName" value="AAI-BAS" />
-  <property name="logDirectory" value="${LOG_DIRECTORY:-.}/${componentName}" />
-
-  <!-- default EELF log file names -->
-  <property name="generalLogName" value="error" />
-  <property name="metricsLogName" value="metrics" />
-  <property name="auditLogName" value="audit" />
-  <property name="debugLogName" value="debug" />
 
-  <property name="errorLogPattern"
-      value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%mdc{RequestId}|%thread|%mdc{ServiceName}|%mdc{PartnerName}|%mdc{TargetEntity}|%mdc{TargetServiceName}|%.-5level|%logger|%mdc{ClassName}|%msg%n" />
 
-  <property name="auditLogPattern"
-      value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%mdc{BeginTimestamp}|%mdc{EndTimestamp}|%mdc{RequestId}|%mdc{ServiceInstanceId}|%thread|%mdc{ServerFQDN}|%mdc{ServiceName}|%mdc{PartnerName}|%mdc{StatusCode}|%mdc{ResponseCode}|%mdc{ResponseDescription}|%logger|%.-5level|||%mdc{ElapsedTime}|%mdc{RemoteHost}|%mdc{ClientAddress}|%mdc{ClassName}|||%msg%n" />
-
-  <property name="metricsLogPattern"
-      value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%mdc{BeginTimestamp}|%mdc{EndTimestamp}|%mdc{RequestId}|%mdc{ServiceInstanceId}|%thread|%mdc{ServerFQDN}|%mdc{ServiceName}|%mdc{PartnerName}|%mdc{TargetEntity}|%mdc{TargetServiceName}|%mdc{StatusCode}|%mdc{ResponseCode}|%mdc{ResponseDescription}|%logger|%.-5level|||%mdc{ElapsedTime}|%mdc{RemoteHost}|%mdc{ClientAddress}|%mdc{ClassName}|||%msg%n" />
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+      <providers>
+        <timestamp>
+          <fieldName>timestamp</fieldName>
+        </timestamp>
+        <message />
+        <mdc>
+          <fieldName>context</fieldName>
+          <excludeMdcKeyName>ServerIPAddress</excludeMdcKeyName>
+          <excludeMdcKeyName>EntryTimestamp</excludeMdcKeyName>
+          <excludeMdcKeyName>InvokeTimestamp</excludeMdcKeyName>
+          <excludeMdcKeyName>ErrorCode</excludeMdcKeyName>
+          <excludeMdcKeyName>ErrorDesc</excludeMdcKeyName>
+        </mdc>
+        <stackTrace>
+          <fieldName>exception</fieldName>
+          <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
+            <exclude>^sun\.reflect\..*\.invoke</exclude>
+            <exclude>^net\.sf\.cglib\.proxy\.MethodProxy\.invoke</exclude>
+            <rootCauseFirst>true</rootCauseFirst>
+          </throwableConverter>
+        </stackTrace>
+        <threadName>
+          <fieldName>thread</fieldName>
+        </threadName>
+        <loggerName>
+          <fieldName>logger</fieldName>
+          <shortenedLoggerNameLength>36</shortenedLoggerNameLength>
+        </loggerName>
+        <logLevel />
+      </providers>
+    </encoder>
+  </appender>
 
   <!-- ============================================================================ -->
   <!-- EELF Appenders -->
   <!-- ============================================================================ -->
 
-  <appender name="EELF"
-      class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${logDirectory}/${generalLogName}.log</file>
-    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <fileNamePattern>${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip
-      </fileNamePattern>
-      <maxHistory>60</maxHistory>
-    </rollingPolicy>
-    <encoder>
-      <pattern>${errorLogPattern}</pattern>
-    </encoder>
-  </appender>
   <appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender">
     <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
       <level>INFO</level>
     </filter>
     <queueSize>256</queueSize>
-    <appender-ref ref="EELF" />
+    <appender-ref ref="STDOUT" />
   </appender>
 
-  <!-- EELF Audit Appender. This appender is used to record audit engine related logging events. The audit logger and appender
-       are specializations of the EELF application root logger and appender. This can be used to segregate Policy engine events
-       from other components, or it can be eliminated to record these events as part of the application root log. -->
-
-  <appender name="EELFAudit"
-      class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${logDirectory}/${auditLogName}.log</file>
-    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip
-      </fileNamePattern>
-      <maxHistory>60</maxHistory>
-    </rollingPolicy>
-    <encoder>
-      <pattern>${auditLogPattern}</pattern>
-    </encoder>
-  </appender>
+  <!-- EELF Audit Appender. This appender is used to record audit engine related logging events. The
+  audit logger and appender
+       are specializations of the EELF application root logger and appender. This can be used to segregate
+  Policy engine events
+       from other components, or it can be eliminated to record these events as part of the application
+  root log. -->
+
   <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender">
     <queueSize>256</queueSize>
-    <appender-ref ref="EELFAudit" />
-  </appender>
-
-  <appender name="EELFMetrics"
-      class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${logDirectory}/${metricsLogName}.log</file>
-    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip
-      </fileNamePattern>
-      <maxHistory>60</maxHistory>
-    </rollingPolicy>
-    <encoder>
-      <pattern>${metricsLogPattern}</pattern>
-    </encoder>
+    <appender-ref ref="STDOUT" />
   </appender>
 
   <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender">
     <queueSize>256</queueSize>
-    <appender-ref ref="EELFMetrics" />
-  </appender>
-
-  <appender name="EELFDebug"
-      class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>
-      ${logDirectory}/${debugLogName}.log
-    </file>
-    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip
-      </fileNamePattern>
-      <maxHistory>60</maxHistory>
-    </rollingPolicy>
-    <encoder>
-      <pattern>${errorLogPattern}</pattern>
-    </encoder>
+    <appender-ref ref="STDOUT" />
   </appender>
 
   <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender">
     <!-- allow only events with a level below INFO, that is TRACE and DEBUG -->
     <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
       <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
-  <expression>
-    e.level.toInt() &lt; INFO.toInt()
-  </expression>
+        <expression>
+          e.level.toInt() &lt; INFO.toInt()
+        </expression>
       </evaluator>
       <OnMismatch>DENY</OnMismatch>
       <OnMatch>NEUTRAL</OnMatch>
     </filter>
     <queueSize>256</queueSize>
-    <appender-ref ref="EELFDebug" />
+    <appender-ref ref="STDOUT" />
     <includeCallerData>false</includeCallerData>
   </appender>
 
-  <!-- ============================================================================ -->
-  <!-- Default / root appenders -->
-  <!-- This determines the logging level for 3rd party code -->
-  <!-- ============================================================================ -->
-
-  <root level="INFO">
-    <appender-ref ref="asyncEELF" />
-  <appender-ref ref="asyncEELFDebug" />
-</root>
 
-  <!-- ============================================================================ -->
-  <!--  EELF loggers -->
-  <!-- ============================================================================ -->
+  <appender name="AsyncSysOut" class="ch.qos.logback.classic.AsyncAppender">
+    <appender-ref ref="STDOUT" />
+  </appender>
 
   <logger name="com.att.eelf" level="INFO" additivity="false">
-  <appender-ref ref="asyncEELF" />
-</logger>
+    <appender-ref ref="asyncEELF" />
+    <appender-ref ref="AsyncSysOut" />
+  </logger>
 
-  <!-- The level of this logger determines the contents of the debug log -->
+          <!-- The level of this logger determines the contents of the debug log -->
   <logger name="com.att.eelf.debug" level="INFO" additivity="false">
-  <appender-ref ref="asyncEELFDebug" />
-</logger>
+    <appender-ref ref="asyncEELFDebug" />
+    <appender-ref ref="AsyncSysOut" />
+  </logger>
 
   <logger name="com.att.eelf.audit" level="INFO" additivity="false">
-  <appender-ref ref="asyncEELFAudit" />
-</logger>
+    <appender-ref ref="asyncEELFAudit" />
+    <appender-ref ref="AsyncSysOut" />
+  </logger>
 
   <logger name="com.att.eelf.metrics" level="INFO" additivity="false">
-  <appender-ref ref="asyncEELFMetrics" />
-</logger>
+    <appender-ref ref="asyncEELFMetrics" />
+    <appender-ref ref="AsyncSysOut" />
+  </logger>
 
-  <!-- ============================================================================ -->
-  <!-- Non-EELF loggers -->
-  <!-- ============================================================================ -->
+        <!-- ============================================================================ -->
+        <!-- Non-EELF loggers -->
+        <!-- ============================================================================ -->
 
-  <!-- ATT packages including DMAAP message routing -->
+        <!-- ATT packages including DMAAP message routing -->
   <logger name="com.att" level="INFO" />
 
-  <!-- Spring related loggers -->
+          <!-- Spring related loggers -->
   <logger name="org.springframework" level="WARN" />
   <logger name="org.springframework.beans" level="WARN" />
   <logger name="org.springframework.web" level="WARN" />
 
-  <!-- Other Loggers that may help troubleshoot -->
+          <!-- Other Loggers that may help troubleshoot -->
   <logger name="org.apache" level="WARN" />
   <logger name="org.apache.commons" level="WARN" />
 
-  <!-- Camel Related Loggers (including restlet/servlet/jaxrs/cxf logging. May aid in troubleshooting) -->
+          <!-- Camel Related Loggers (including restlet/servlet/jaxrs/cxf logging. May aid in
+          troubleshooting) -->
   <logger name="org.apache.camel" level="WARN" />
   <logger name="org.apache.cxf" level="WARN" />
   <logger name="org.apache.camel.processor.interceptor" level="WARN" />
@@ -191,8 +150,13 @@ To find main logging config please check `logging.config` in the application.pro
   <logger name="org.restlet" level="WARN" />
   <logger name="org.apache.camel.component.restlet" level="WARN" />
 
-  <!-- logback internals logging -->
+          <!-- logback internals logging -->
   <logger name="ch.qos.logback.classic" level="WARN" />
   <logger name="ch.qos.logback.core" level="WARN" />
 
-</configuration>
+  <root>
+    <appender-ref ref="asyncEELF" />
+    <appender-ref ref="asyncEELFDebug" />
+    <appender-ref ref="AsyncSysOut" />
+  </root>
+</configuration>
\ No newline at end of file