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.
@@ -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 = ZeddemoreLogger.winstonLogLevelIdToName(logLevel);
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
- #createLogger = (options) => {
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
- static createLogger = (options) => {
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.#createLogger(loggerOptions);
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
- #createUserLogger = (requestId = null, username = null, logLevel = this.defaultUserLogLevel, ipAddress = null) => {
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.#createLogger(loggerOptions);
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.#createLogger(options);
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.#createRequestLogger(requestId, ipAddress);
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.#createUserLogger(requestId, username, level, ipAddress);
246
+ res.locals.user.logger = this.createUserLogger(requestId, username, level, ipAddress);
246
247
  return next();
247
248
  }
248
249
 
249
- static winstonLogLevelIdToName(levelId) {
250
- const logLevelEntry = _.find(logLevelMap, { winstonLevel: levelId });
251
- return logLevelEntry ? logLevelEntry.winstonName : wlln.HTTP;
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 writeAxiosLog(axiosResponse, logOptions, options) {
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 = axiosResponse.request.method || null;
284
+ const _method = request.method || null;
269
285
  const method = _method ? chalkHttpVerb(_method) : null;
270
- const path = axiosResponse.request.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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zeddemore-logger",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Node.js Express logger using Morgan and Winston for thread and caller info tracking",
5
5
  "repository": {
6
6
  "type": "git",