@lilaquadrat/studio 10.0.0-beta.7 → 10.0.0-beta.8
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/src/logger.js +102 -29
- package/lib/src/logger.js.map +1 -1
- package/package.json +1 -1
package/lib/src/logger.js
CHANGED
|
@@ -1,40 +1,113 @@
|
|
|
1
1
|
import { createLogger, format, transports } from 'winston';
|
|
2
2
|
import prettyjson from 'prettyjson';
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
const LOG_FORMAT = process.env.LOG_FORMAT ??
|
|
4
|
+
(process.env.NODE_ENV === 'production' ? 'json' : 'console');
|
|
5
|
+
const LOG_LEVEL = process.env.LOG_LEVEL ??
|
|
6
|
+
(process.env.NODE_ENV === 'production' ? 'info' : 'debug');
|
|
7
|
+
const REDACT_KEYS = new Set([
|
|
8
|
+
'password',
|
|
9
|
+
'passwd',
|
|
10
|
+
'secret',
|
|
11
|
+
'token',
|
|
12
|
+
'access_token',
|
|
13
|
+
'refresh_token',
|
|
14
|
+
'api_key',
|
|
15
|
+
'apikey',
|
|
16
|
+
'authorization',
|
|
17
|
+
'cookie',
|
|
18
|
+
'set-cookie',
|
|
19
|
+
]);
|
|
20
|
+
function redactDeep(value) {
|
|
21
|
+
if (!value || typeof value !== 'object')
|
|
22
|
+
return value;
|
|
23
|
+
if (Array.isArray(value))
|
|
24
|
+
return value.map(redactDeep);
|
|
25
|
+
const obj = value;
|
|
26
|
+
const out = {};
|
|
27
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
28
|
+
if (REDACT_KEYS.has(k.toLowerCase()))
|
|
29
|
+
out[k] = '[REDACTED]';
|
|
30
|
+
else
|
|
31
|
+
out[k] = redactDeep(v);
|
|
11
32
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
function toPlainObject(value) {
|
|
36
|
+
if (!value || typeof value !== 'object')
|
|
37
|
+
return undefined;
|
|
38
|
+
if (Array.isArray(value))
|
|
39
|
+
return { items: value };
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
function safePretty(value) {
|
|
43
|
+
try {
|
|
44
|
+
return prettyjson.render(value);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// fallback for circular/unsupported structures
|
|
48
|
+
try {
|
|
49
|
+
return JSON.stringify(value);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return String(value);
|
|
53
|
+
}
|
|
15
54
|
}
|
|
16
|
-
return base;
|
|
17
|
-
});
|
|
18
|
-
if (process.env.LOG_FORMAT === 'console') {
|
|
19
|
-
useFormat = format.combine(format((info) => {
|
|
20
|
-
info.level = info.level.toUpperCase();
|
|
21
|
-
return info;
|
|
22
|
-
})(), format.timestamp({
|
|
23
|
-
format: 'HH:mm:ss',
|
|
24
|
-
}),
|
|
25
|
-
// format.colorize({ all: true, colors: { info: 'white', debug: 'magenta' } }),
|
|
26
|
-
format.simple(), format.splat(), format.errors({ stack: true }), mainFormat);
|
|
27
55
|
}
|
|
28
|
-
|
|
29
|
-
|
|
56
|
+
const normalize = format((info) => {
|
|
57
|
+
// Keep winston core fields, move everything else into `meta`
|
|
58
|
+
const { level, message, timestamp, stack, ...rest } = info;
|
|
59
|
+
// If message itself is an Error, normalize it
|
|
60
|
+
if (message instanceof Error) {
|
|
61
|
+
info.message = message.message;
|
|
62
|
+
info.stack = info.stack ?? message.stack;
|
|
63
|
+
}
|
|
64
|
+
const meta = toPlainObject(rest);
|
|
65
|
+
if (meta && Object.keys(meta).length > 0) {
|
|
66
|
+
info.meta = redactDeep(meta);
|
|
67
|
+
}
|
|
68
|
+
if (info.data) {
|
|
69
|
+
info.data = redactDeep(info.data);
|
|
70
|
+
}
|
|
71
|
+
// Ensure message is a string for printf/json loggers
|
|
72
|
+
if (typeof info.message !== 'string') {
|
|
73
|
+
try {
|
|
74
|
+
info.message = JSON.stringify(info.message);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
info.message = String(info.message);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return info;
|
|
81
|
+
});
|
|
82
|
+
const consoleFormat = format.combine(format.colorize({ all: true }), format.timestamp({ format: 'HH:mm:ss' }), format.errors({ stack: true }), format.splat(), normalize(), format.printf((info) => {
|
|
83
|
+
const lvl = String(info.level).toUpperCase();
|
|
84
|
+
const header = `[${info.timestamp}][${lvl}] ${info.message}`;
|
|
85
|
+
const blocks = [];
|
|
86
|
+
if (info.data)
|
|
87
|
+
blocks.push(safePretty(info.data));
|
|
88
|
+
if (info.meta)
|
|
89
|
+
blocks.push(safePretty(info.meta));
|
|
90
|
+
if (info.stack)
|
|
91
|
+
blocks.push(String(info.stack));
|
|
92
|
+
return blocks.length ? `${header}\n\n${blocks.join('\n\n')}\n` : header;
|
|
93
|
+
}));
|
|
94
|
+
const jsonFormat = format.combine(format.timestamp(), format.errors({ stack: true }), format.splat(), normalize(), format.json());
|
|
95
|
+
function createConsoleTransport() {
|
|
96
|
+
return new transports.Console({
|
|
97
|
+
stderrLevels: ['error'],
|
|
98
|
+
handleExceptions: true,
|
|
99
|
+
});
|
|
30
100
|
}
|
|
101
|
+
const consoleTransport = createConsoleTransport();
|
|
31
102
|
const logger = createLogger({
|
|
32
|
-
level:
|
|
33
|
-
format:
|
|
34
|
-
transports: [
|
|
35
|
-
new transports.Console(),
|
|
36
|
-
],
|
|
103
|
+
level: LOG_LEVEL,
|
|
104
|
+
format: LOG_FORMAT === 'console' ? consoleFormat : jsonFormat,
|
|
37
105
|
defaultMeta: { service: 'studio' },
|
|
106
|
+
transports: [consoleTransport],
|
|
107
|
+
exceptionHandlers: [createConsoleTransport()],
|
|
108
|
+
rejectionHandlers: [createConsoleTransport()],
|
|
109
|
+
exitOnError: false,
|
|
110
|
+
silent: process.env.NODE_ENV === 'test',
|
|
38
111
|
});
|
|
39
112
|
export default logger;
|
|
40
113
|
//# sourceMappingURL=logger.js.map
|
package/lib/src/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,UAAU,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
|