zeddemore-logger 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/zeddemore-logger.js +51 -35
- package/package.json +1 -1
package/lib/zeddemore-logger.js
CHANGED
|
@@ -21,6 +21,17 @@ const DEFAULT_REQUEST_ID_ATTRIBUTE = 'requestId';
|
|
|
21
21
|
const DEFAULT_USER_LOG_LEVEL = -1;
|
|
22
22
|
const WINSTON_CONSOLE_TRANSPORT_NAME = 'console';
|
|
23
23
|
|
|
24
|
+
function massageLogLevel(logLevel) {
|
|
25
|
+
if (!logLevel) return wlln.VERBOSE;
|
|
26
|
+
if (!_.isInteger(logLevel)) return logLevel;
|
|
27
|
+
return winstonLogLevelIdToName(logLevel);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function winstonLogLevelIdToName(levelId) {
|
|
31
|
+
const logLevelEntry = _.find(logLevelMap, { winstonLevel: levelId });
|
|
32
|
+
return logLevelEntry ? logLevelEntry.winstonName : wlln.HTTP;
|
|
33
|
+
}
|
|
34
|
+
|
|
24
35
|
class ZeddemoreLogger {
|
|
25
36
|
|
|
26
37
|
constructor(options) {
|
|
@@ -62,7 +73,7 @@ class ZeddemoreLogger {
|
|
|
62
73
|
|
|
63
74
|
#buildWinstonTransport = (logLevel = this.logLevel) => {
|
|
64
75
|
logLevel = logLevel || this.logLevel;
|
|
65
|
-
const level =
|
|
76
|
+
const level = winstonLogLevelIdToName(logLevel);
|
|
66
77
|
return new transports.Console({ level, name: WINSTON_CONSOLE_TRANSPORT_NAME });
|
|
67
78
|
}
|
|
68
79
|
|
|
@@ -121,7 +132,7 @@ class ZeddemoreLogger {
|
|
|
121
132
|
* @param [options] {Object}
|
|
122
133
|
* @returns {Logger}
|
|
123
134
|
*/
|
|
124
|
-
|
|
135
|
+
createLogger = (options) => {
|
|
125
136
|
options = options || { };
|
|
126
137
|
return createWinstonLogger({
|
|
127
138
|
format: this.#buildWinstonFormat(options, options.formats),
|
|
@@ -129,29 +140,19 @@ class ZeddemoreLogger {
|
|
|
129
140
|
});
|
|
130
141
|
}
|
|
131
142
|
|
|
132
|
-
|
|
133
|
-
const zeddemoreLogger = new ZeddemoreLogger();
|
|
134
|
-
return zeddemoreLogger.#createLogger(options);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
#createRequestLogger = (requestId = null, ipAddress = null) => {
|
|
143
|
+
createRequestLogger = (requestId = null, ipAddress = null) => {
|
|
138
144
|
requestId = requestId || this.#generateUuid();
|
|
139
145
|
const loggerOptions = { id: requestId };
|
|
140
146
|
if (ipAddress) loggerOptions.ip = ipAddress;
|
|
141
|
-
return this
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
static createRequestLogger = (requestId = null, ipAddress = null) => {
|
|
145
|
-
const zeddemoreLogger = new ZeddemoreLogger();
|
|
146
|
-
return zeddemoreLogger.#createRequestLogger(requestId, ipAddress);
|
|
147
|
+
return this.createLogger(loggerOptions);
|
|
147
148
|
}
|
|
148
149
|
|
|
149
|
-
|
|
150
|
+
createUserLogger = (requestId = null, username = null, logLevel = this.defaultUserLogLevel, ipAddress = null) => {
|
|
150
151
|
requestId = requestId || this.#generateUuid();
|
|
151
152
|
logLevel = logLevel || this.defaultUserLogLevel;
|
|
152
153
|
const loggerOptions = { id: requestId, level: logLevel, user: username };
|
|
153
154
|
if (ipAddress) loggerOptions.ip = ipAddress;
|
|
154
|
-
return this
|
|
155
|
+
return this.createLogger(loggerOptions);
|
|
155
156
|
}
|
|
156
157
|
|
|
157
158
|
#generateUuid() {
|
|
@@ -187,7 +188,7 @@ class ZeddemoreLogger {
|
|
|
187
188
|
const logger = options.logger || (options.user ? options.user.logger : null) || ((app && app.locals) ? app.locals.logger : null);
|
|
188
189
|
if (logger) return logger;
|
|
189
190
|
const zeddemoreLogger = new ZeddemoreLogger();
|
|
190
|
-
return zeddemoreLogger
|
|
191
|
+
return zeddemoreLogger.createLogger(options);
|
|
191
192
|
}
|
|
192
193
|
|
|
193
194
|
morganMiddleware = (options) => {
|
|
@@ -220,7 +221,7 @@ class ZeddemoreLogger {
|
|
|
220
221
|
res.header(rqh.REQUEST_ID, requestId);
|
|
221
222
|
const ipAddress = requestValues.ipAddress;
|
|
222
223
|
res.locals.user = res.locals.user || { };
|
|
223
|
-
res.locals.user.logger = this
|
|
224
|
+
res.locals.user.logger = this.createRequestLogger(requestId, ipAddress);
|
|
224
225
|
return next();
|
|
225
226
|
}
|
|
226
227
|
|
|
@@ -242,32 +243,47 @@ class ZeddemoreLogger {
|
|
|
242
243
|
if (userLogLevel < 0) userLogLevel = this.logLevel;
|
|
243
244
|
const level = this.forceLogLevel ? this.logLevel : userLogLevel;
|
|
244
245
|
res.locals.user = res.locals.user || user;
|
|
245
|
-
res.locals.user.logger = this
|
|
246
|
+
res.locals.user.logger = this.createUserLogger(requestId, username, level, ipAddress);
|
|
246
247
|
return next();
|
|
247
248
|
}
|
|
248
249
|
|
|
249
|
-
static
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
static writeAxiosErrorLog(axiosError, logOptions, options) {
|
|
251
|
+
logOptions = logOptions || { };
|
|
252
|
+
options = options || { };
|
|
253
|
+
if (!axiosError || !axiosError.response) return;
|
|
254
|
+
const response = axiosError.response;
|
|
255
|
+
if (!response.request) return;
|
|
256
|
+
const request = response.request;
|
|
257
|
+
const logLevel = massageLogLevel(logOptions.logLevel);
|
|
258
|
+
const logger = options.logger || ZeddemoreLogger.log(options);
|
|
259
|
+
if (!logger) return;
|
|
260
|
+
const _method = request.method || null;
|
|
261
|
+
const method = _method ? chalkHttpVerb(_method) : null;
|
|
262
|
+
const path = response.config.url || '';
|
|
263
|
+
const prefix = logOptions.prefix ? `[${ logOptions.prefix }]` : null;
|
|
264
|
+
const status = chalkHttpStatus(response.status);
|
|
265
|
+
const _duration = axiosError.duration || response.duration;
|
|
266
|
+
const duration = _duration ? convertMilliseconds(_duration) : '-';
|
|
267
|
+
const _contentLength = response.headers ? response.headers[ rsh.CONTENT_LENGTH ] : null;
|
|
268
|
+
const contentLength = _contentLength ? `- ${ convertBytes(_contentLength) }` : null;
|
|
269
|
+
const parts = [ prefix, method, path, status, duration, contentLength ];
|
|
270
|
+
const message = _.compact(parts).join(' ');
|
|
271
|
+
logger[ logLevel ](message);
|
|
252
272
|
}
|
|
253
273
|
|
|
254
|
-
static
|
|
255
|
-
function massageLogLevel(logLevel) {
|
|
256
|
-
if (!logLevel) return wlln.VERBOSE;
|
|
257
|
-
if (!_.isInteger(logLevel)) return logLevel;
|
|
258
|
-
return ZeddemoreLogger.winstonLogLevelIdToName(logLevel);
|
|
259
|
-
}
|
|
260
|
-
if (!axiosResponse || !axiosResponse.request) return;
|
|
274
|
+
static writeAxiosResponseLog(axiosResponse, logOptions, options) {
|
|
261
275
|
logOptions = logOptions || { };
|
|
262
276
|
options = options || { };
|
|
277
|
+
if (!axiosResponse || !axiosResponse.request) return;
|
|
278
|
+
const request = axiosResponse.request;
|
|
263
279
|
const axiosConfig = logOptions.axios || { };
|
|
264
280
|
const configData = logOptions.data ? JSON.stringify(axiosConfig.data) : null;
|
|
265
281
|
const logLevel = massageLogLevel(logOptions.logLevel);
|
|
266
282
|
const logger = options.logger || ZeddemoreLogger.log(options);
|
|
267
283
|
if (!logger) return;
|
|
268
|
-
const _method =
|
|
284
|
+
const _method = request.method || null;
|
|
269
285
|
const method = _method ? chalkHttpVerb(_method) : null;
|
|
270
|
-
const path =
|
|
286
|
+
const path = request.path || '';
|
|
271
287
|
const prefix = logOptions.prefix ? `[${ logOptions.prefix }]` : null;
|
|
272
288
|
const responseData = logOptions.response ? JSON.stringify(axiosResponse.data) : null;
|
|
273
289
|
const status = chalkHttpStatus(axiosResponse.status);
|
|
@@ -283,10 +299,10 @@ class ZeddemoreLogger {
|
|
|
283
299
|
}
|
|
284
300
|
|
|
285
301
|
module.exports = {
|
|
286
|
-
createLogger: ZeddemoreLogger.createLogger,
|
|
287
|
-
createRequestLogger: ZeddemoreLogger.createRequestLogger,
|
|
288
302
|
log: ZeddemoreLogger.log,
|
|
303
|
+
winstonLogLevelIdToName,
|
|
304
|
+
writeAxiosErrorLog: ZeddemoreLogger.writeAxiosResponseLog,
|
|
305
|
+
writeAxiosLog: ZeddemoreLogger.writeAxiosResponseLog, // deprecated
|
|
306
|
+
writeAxiosResponseLog: ZeddemoreLogger.writeAxiosResponseLog,
|
|
289
307
|
ZeddemoreLogger,
|
|
290
|
-
winstonLogLevelIdToName: ZeddemoreLogger.winstonLogLevelIdToName,
|
|
291
|
-
writeAxiosLog: ZeddemoreLogger.writeAxiosLog,
|
|
292
308
|
};
|