summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/dcae/commonFunction/VESLogger.java
blob: 8902a47cbbe6d0651c1be28ed984d0e95434e321 (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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*-
 * ============LICENSE_START=======================================================
 * PROJECT
 * ================================================================================
 * Copyright (C) 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=========================================================
 */

package org.onap.dcae.commonFunction;

import com.att.nsa.clock.SaClock;
import com.att.nsa.logging.LoggingContext;
import com.att.nsa.logging.LoggingContextFactory;
import com.att.nsa.logging.log4j.EcompFields;
import jline.internal.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.UUID;

public class VESLogger {

	public static final String VES_AGENT = "VES_AGENT";
	private static final String REQUEST_ID = "requestId";
	private static final String IP_ADDRESS = "127.0.0.1";
	private static final String HOST_NAME = "localhost";

	public static Logger auditLog;
	public static Logger metricsLog;
	public static Logger errorLog;
	public static Logger debugLog;

	// Common LoggingContext
	private static LoggingContext commonLC;
	// Thread-specific LoggingContext
	private static LoggingContext threadLC;
	public LoggingContext lc;

	/**
	 * Returns the common LoggingContext instance that is the base context for
	 * all subsequent instances.
	 *
	 * @return the common LoggingContext
	 */
	public static LoggingContext getCommonLoggingContext() {
		if (commonLC == null) {
			commonLC = new LoggingContextFactory.Builder().build();
			final UUID uuid = UUID.randomUUID();

			commonLC.put(REQUEST_ID, uuid.toString());
		}
		return commonLC;
	}

	/**
	 * Get a logging context for the current thread that's based on the common
	 * logging context. Populate the context with context-specific values.
	 *
	 * @param aUuid
	 *            uuid for request id
	 * @return a LoggingContext for the current thread
	 */
	public static LoggingContext getLoggingContextForThread(UUID aUuid) {
		// note that this operation requires everything from the common context
		// to be (re)copied into the target context. That seems slow, but it
		// actually
		// helps prevent the thread from overwriting supposedly common data. It
		// also
		// should be fairly quick compared with the overhead of handling the
		// actual
		// service call.

		threadLC = new LoggingContextFactory.Builder().withBaseContext(getCommonLoggingContext()).build();
		// Establish the request-specific UUID, as long as we are here...
		threadLC.put(REQUEST_ID, aUuid.toString());
		threadLC.put(EcompFields.kEndTimestamp, SaClock.now());

		return threadLC;
	}

	/**
	 * Get a logging context for the current thread that's based on the common
	 * logging context. Populate the context with context-specific values.
	 *
	 * @param aUuid
	 *            uuid for request id
	 * @return a LoggingContext for the current thread
	 */
	public static LoggingContext getLoggingContextForThread(String aUuid) {
		// note that this operation requires everything from the common context
		// to be (re)copied into the target context. That seems slow, but it
		// actually
		// helps prevent the thread from overwriting supposedly common data. It
		// also
		// should be fairly quick compared with the overhead of handling the
		// actual
		// service call.

		threadLC = new LoggingContextFactory.Builder().withBaseContext(getCommonLoggingContext()).build();
		// Establish the request-specific UUID, as long as we are here...
		threadLC.put(REQUEST_ID, aUuid);
		threadLC.put("statusCode", "COMPLETE");
		threadLC.put(EcompFields.kEndTimestamp, SaClock.now());
		return threadLC;
	}

	public static void setUpEcompLogging() {

		// Create ECOMP Logger instances
		auditLog = LoggerFactory.getLogger("com.att.ecomp.audit");
		metricsLog = LoggerFactory.getLogger("com.att.ecomp.metrics");
		debugLog = LoggerFactory.getLogger("com.att.ecomp.debug");
		errorLog = LoggerFactory.getLogger("com.att.ecomp.error");

		final LoggingContext lc = getCommonLoggingContext();

		String ipAddr = IP_ADDRESS;
		String hostname = HOST_NAME;
		try {
			final InetAddress ip = InetAddress.getLocalHost();
			hostname = ip.getCanonicalHostName();
			ipAddr = ip.getHostAddress();
		} catch (UnknownHostException x) {
			Log.debug(x.getMessage());
		}

		lc.put("serverName", hostname);
		lc.put("serviceName", "VESCollecor");
		lc.put("statusCode", "RUNNING");
		lc.put("targetEntity", "NULL");
		lc.put("targetServiceName", "NULL");
		lc.put("server", hostname);
		lc.put("serverIpAddress", ipAddr);

		// instance UUID is meaningless here, so we just create a new one each
		// time the
		// server starts. One could argue each new instantiation of the service
		// should
		// have a new instance ID.
		lc.put("instanceUuid", "");
		lc.put("severity", "");
		lc.put(EcompFields.kEndTimestamp, SaClock.now());
		lc.put("EndTimestamp", SaClock.now());
		lc.put("partnerName", "NA");
	}

}