@abtnode/logger 1.7.7 → 1.7.10
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 +31 -12
- package/lib/util.js +30 -0
- package/package.json +3 -2
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}
|
|
46
|
+
result = `${result} [${message}]`;
|
|
45
47
|
}
|
|
46
48
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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(
|
|
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
|
-
({
|
|
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 =
|
|
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 =
|
|
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.
|
|
3
|
+
"version": "1.7.10",
|
|
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": "
|
|
48
|
+
"gitHead": "8eab10fd39b6183a2fa4d2706f52e8b2ecaa059a"
|
|
48
49
|
}
|