Sync the latest code changes
[aai/aai-common.git] / aai-core / src / main / java / org / onap / aai / logging / LogFormatTools.java
index 702741b..19650b6 100644 (file)
@@ -25,6 +25,10 @@ import java.time.Instant;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
+import org.onap.aai.util.AAIConfig;
+import org.onap.aai.util.AAIConstants;
+import org.onap.aai.exceptions.AAIException;
+import org.apache.commons.lang.exception.ExceptionUtils;
 
 public class LogFormatTools {
 
@@ -43,4 +47,76 @@ public class LogFormatTools {
        public static long toTimestamp(String date) {
                return ZonedDateTime.parse(date, DTF).toInstant().toEpochMilli();
        }
+       /**
+        * Gets the stack top.
+        *
+        * @param e the e
+        * @return the stack top
+        * @throws NumberFormatException the number format exception
+        * @throws AAIException the AAI exception
+        */
+       public static String getStackTop(Throwable e) {
+               StringBuffer stackMessage = new StringBuffer();
+               int maxStackTraceEntries = 10;
+               try {
+                       maxStackTraceEntries = Integer.valueOf(AAIConfig.get(AAIConstants.LOGGING_MAX_STACK_TRACE_ENTRIES));
+               }
+               catch (AAIException a) {
+                       //ignore, use default
+               }
+               catch (NumberFormatException n) {
+                       //ignore, use default
+               }
+               if (e != null) {
+                       Throwable rootCause = ExceptionUtils.getRootCause(e);
+                       if (rootCause != null) {
+                               stackMessage.append("root cause=" + ExceptionUtils.getRootCause(e));
+                               StackTraceElement[] elements = rootCause.getStackTrace();
+                               int i = 0;
+                               for (StackTraceElement element : elements) {
+                                       if (i < maxStackTraceEntries) {
+                                               stackMessage.append(" ClassName- ");
+                                               stackMessage.append(element.getClassName());
+                                               stackMessage.append(" :LineNumber- ");
+                                               stackMessage.append(element.getLineNumber());
+                                               stackMessage.append(" :MethodName- ");
+                                               stackMessage.append(element.getMethodName());
+                                       }
+                                       i++;
+                               }
+                       } else if (e.getCause() != null) {
+                               stackMessage.append("cause=" + e.getCause());
+                               StackTraceElement[] elements = e.getCause().getStackTrace();
+                               int i = 0;
+                               for (StackTraceElement element : elements) {
+                                       if (i < maxStackTraceEntries) {
+                                               stackMessage.append(" ClassName- ");
+                                               stackMessage.append(element.getClassName());
+                                               stackMessage.append(" :LineNumber- ");
+                                               stackMessage.append(element.getLineNumber());
+                                               stackMessage.append(" :MethodName- ");
+                                               stackMessage.append(element.getMethodName());
+                                       }
+                                       i++;
+                               }
+                       } else if (e.getStackTrace() != null) {
+                               stackMessage.append("ex=" + e.toString());
+                               StackTraceElement[] elements = e.getStackTrace();
+                               int i = 0;
+                               for (StackTraceElement element : elements) {
+                                       if (i < maxStackTraceEntries) {
+                                               stackMessage.append(" ClassName- ");
+                                               stackMessage.append(element.getClassName());
+                                               stackMessage.append(" :LineNumber- ");
+                                               stackMessage.append(element.getLineNumber());
+                                               stackMessage.append(" :MethodName- ");
+                                               stackMessage.append(element.getMethodName());
+                                       }
+                                       i++;
+                               }
+                       }
+               }
+               return stackMessage.toString();
+       }
+
 }