@abtnode/logger 1.7.6 → 1.7.9

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/logger.js CHANGED
@@ -3,8 +3,10 @@ const path = require('path');
3
3
  const isEmpty = require('lodash.isempty');
4
4
  const { createLogger, format, transports } = require('winston');
5
5
  const debug = require('debug');
6
+ const rfs = require('rotating-file-stream');
6
7
  require('winston-daily-rotate-file');
7
8
  const CustomRotateFileTransport = require('./transport');
9
+ const { accessLogFilenameGenerator } = require('./util');
8
10
 
9
11
  const instanceMap = new Map();
10
12
 
@@ -34,24 +36,29 @@ const getNoopLogger = (label = '') => {
34
36
  // singleton per process
35
37
  let addedRejectionExceptionTransport = false;
36
38
 
37
- const customPrintfCallback = ({ level, message, label, timestamp, metadata }) => {
39
+ const customPrintfCallback = ({ level, message, label, timestamp, metadata, [Symbol.for('splat')]: splat }) => {
38
40
  let result = `[${process.pid}] [${timestamp}] [${level}]`;
39
41
  if (label) {
40
42
  result = `${result} [${label}]`;
41
43
  }
42
44
 
43
45
  if (!isEmpty(message)) {
44
- result = `${result} "${message}"`;
46
+ result = `${result} [${message}]`;
45
47
  }
46
48
 
47
- if (!isEmpty(metadata)) {
48
- if (metadata.error && metadata.error instanceof Error) {
49
- const { error } = metadata;
50
- metadata.error = error.message;
51
- metadata.error_stack = error.stack;
49
+ let newMetaData = metadata;
50
+ if (isEmpty(newMetaData) && !isEmpty(splat)) {
51
+ newMetaData = { data: splat[0] };
52
+ }
53
+
54
+ if (!isEmpty(newMetaData)) {
55
+ if (newMetaData.error && newMetaData.error instanceof Error) {
56
+ const { error } = newMetaData;
57
+ newMetaData.error = error.message;
58
+ newMetaData.error_stack = error.stack;
52
59
  }
53
60
 
54
- result = `${result} ${JSON.stringify(metadata)}`;
61
+ result = `${result} ${JSON.stringify(newMetaData)}`;
55
62
  }
56
63
 
57
64
  return result;
@@ -59,7 +66,12 @@ const customPrintfCallback = ({ level, message, label, timestamp, metadata }) =>
59
66
 
60
67
  const initLogger =
61
68
  (label = '') =>
62
- ({ logDir = process.env.ABT_NODE_LOG_DIR, filename = 'daemon', retain } = {}) => {
69
+ ({
70
+ logDir = process.env.ABT_NODE_LOG_DIR,
71
+ filename = 'daemon',
72
+ retain,
73
+ level = process.env.ABT_NODE_LOG_LEVEL,
74
+ } = {}) => {
63
75
  if (!logDir) {
64
76
  return getNoopLogger(label);
65
77
  }
@@ -68,14 +80,13 @@ const initLogger =
68
80
  format: format.combine(
69
81
  format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
70
82
  format.label({ label }),
71
- format.splat(),
72
83
  format.metadata({ fillExcept: ['message', 'level', 'timestamp', 'label'] }),
73
84
  format.printf(customPrintfCallback)
74
85
  ),
75
86
  });
76
87
 
77
88
  if (process.env.NODE_ENV === 'production') {
78
- logger.level = process.env.ABT_NODE_LOG_LEVEL || 'info';
89
+ logger.level = level || 'info';
79
90
  if (!fs.existsSync(logDir)) {
80
91
  fs.mkdirSync(logDir, { recursive: true });
81
92
  }
@@ -126,7 +137,7 @@ const initLogger =
126
137
  addedRejectionExceptionTransport = true;
127
138
  }
128
139
  } else {
129
- logger.level = process.env.ABT_NODE_LOG_LEVEL || 'debug';
140
+ logger.level = level || 'debug';
130
141
  const transport = new transports.Console();
131
142
 
132
143
  logger.add(transport);
@@ -149,8 +160,16 @@ const getLogger = (label = '', options = {}) => {
149
160
  return instanceMap.get(label);
150
161
  };
151
162
 
163
+ const getAccessLogStream = (dir) =>
164
+ rfs.createStream(accessLogFilenameGenerator, {
165
+ interval: '1d',
166
+ path: dir,
167
+ compress: 'gzip',
168
+ });
169
+
152
170
  module.exports = getLogger;
153
171
  module.exports.initLogger = initLogger;
154
172
  module.exports.getNoopLogger = getNoopLogger;
155
173
  module.exports.customPrintfCallback = customPrintfCallback;
156
174
  module.exports.getInstanceSize = () => instanceMap.size;
175
+ module.exports.getAccessLogStream = getAccessLogStream;
package/lib/util.js ADDED
@@ -0,0 +1,30 @@
1
+ const getPreDate = (date) => {
2
+ date.setDate(date.getDate() - 1);
3
+
4
+ const year = date.getFullYear().toString();
5
+ const month = (date.getMonth() + 1).toString().padStart(2, 0);
6
+ const day = date.getDate().toString().padStart(2, 0);
7
+
8
+ return { year, month, day };
9
+ };
10
+
11
+ const accessLogFilenameGenerator = (time, index) => {
12
+ if (!time) {
13
+ return 'access.log';
14
+ }
15
+
16
+ const { year, month, day } = getPreDate(time);
17
+
18
+ let filename = `access-${year}-${month}-${day}`;
19
+
20
+ if (index > 1) {
21
+ filename = `${filename}-${index}`;
22
+ }
23
+
24
+ return `${filename}.log.gz`;
25
+ };
26
+
27
+ module.exports = {
28
+ getPreDate,
29
+ accessLogFilenameGenerator,
30
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abtnode/logger",
3
- "version": "1.7.6",
3
+ "version": "1.7.9",
4
4
  "description": "ABT Node logger lib",
5
5
  "keywords": [
6
6
  "logger",
@@ -38,11 +38,12 @@
38
38
  "fs-extra": "^10.0.1",
39
39
  "lodash.isempty": "^4.4.0",
40
40
  "rewire": "^5.0.0",
41
+ "rotating-file-stream": "^2.1.6",
41
42
  "winston": "^3.3.4",
42
43
  "winston-daily-rotate-file": "^4.5.5"
43
44
  },
44
45
  "devDependencies": {
45
46
  "express": "^4.17.1"
46
47
  },
47
- "gitHead": "47a9dbd6ea74419ff586336824ebb9b2fe7694aa"
48
+ "gitHead": "285f4fedd41fcb8e1814ce5d8250ac10616e67e0"
48
49
  }