summaryrefslogtreecommitdiffstats
path: root/aai-core/src/main/java/org/onap/aai/logging/LogFormatTools.java
blob: 19650b65e75695c2e298ceeb18f1822af9e1d301 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
 * ============LICENSE_START=======================================================
 * org.onap.aai
 * ================================================================================
 * Copyright © 2017 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=========================================================
 *
 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
 */
package org.onap.aai.logging;

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 {

	private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
	private static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern(DATE_FORMAT)
																	.withZone(ZoneOffset.UTC);

	public static String getCurrentDateTime() {
		return DTF.format(ZonedDateTime.now());
	}

	public static String toDate(long timestamp) {
		return DTF.format(Instant.ofEpochMilli(timestamp));
	}

	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();
	}

}