@rife/logger 0.0.6-beta.11 → 0.0.6-beta.13
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/dist/cjs/common.cjs +3 -3
- package/dist/cjs/env.cjs +3 -3
- package/dist/cjs/index.cjs +7 -9
- package/dist/cjs/pino/index.cjs +25 -8
- package/dist/cjs/pino/rotate.cjs +6 -6
- package/dist/cjs/pino/worker/pino-file.cjs +221 -128
- package/dist/cjs/pino/worker/pino-pretty.cjs +327 -420
- package/dist/cjs/pino/worker/pino-rotate.cjs +21 -20
- package/dist/cjs/pino/worker/pino-worker.cjs +296 -203
- package/dist/cjs/pino/worker/thread-stream.cjs +39 -37
- package/dist/cjs/pino/worker.cjs +116 -0
- package/dist/cjs/test.cjs +6 -2
- package/dist/cjs/trace.cjs +3 -3
- package/dist/cjs/worker/index.cjs +5 -0
- package/dist/esm/common.mjs +3 -4
- package/dist/esm/env.mjs +1 -2
- package/dist/esm/index.mjs +1 -2
- package/dist/esm/pino/index.mjs +29 -25
- package/dist/esm/pino/rotate.mjs +8 -18
- package/dist/esm/pino/worker/pino-file.cjs +221 -128
- package/dist/esm/pino/worker/pino-pretty.cjs +327 -420
- package/dist/esm/pino/worker/pino-rotate.cjs +21 -20
- package/dist/esm/pino/worker/pino-worker.cjs +296 -203
- package/dist/esm/pino/worker/thread-stream.cjs +39 -37
- package/dist/esm/pino/worker.mjs +74 -0
- package/dist/esm/rslib-runtime.mjs +19 -0
- package/dist/esm/test.mjs +8 -5
- package/dist/esm/trace.mjs +1 -2
- package/dist/esm/worker/index.mjs +1 -0
- package/dist/worker/pino-file.cjs +221 -128
- package/dist/worker/pino-pretty.cjs +327 -420
- package/dist/worker/pino-rotate.cjs +21 -20
- package/dist/worker/pino-worker.cjs +296 -203
- package/dist/worker/thread-stream.cjs +39 -37
- package/package.json +16 -8
- package/src/pino/index.ts +30 -3
- package/src/pino/worker.ts +82 -0
- package/src/test.ts +5 -2
- package/src/worker/index.ts +3 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __webpack_modules__ = {
|
|
2
|
-
"../../node_modules/.pnpm/real-require@0.2.0/node_modules/real-require/src/index.js"
|
|
3
|
+
"../../node_modules/.pnpm/real-require@0.2.0/node_modules/real-require/src/index.js" (module1) {
|
|
3
4
|
const realImport = new Function('modulePath', 'return import(modulePath)');
|
|
4
5
|
function realRequire(modulePath) {
|
|
5
6
|
if ('function' == typeof __non_webpack__require__) return __non_webpack__require__(modulePath);
|
|
@@ -10,7 +11,7 @@ var __webpack_modules__ = {
|
|
|
10
11
|
realRequire
|
|
11
12
|
};
|
|
12
13
|
},
|
|
13
|
-
"../../node_modules/.pnpm/thread-stream@
|
|
14
|
+
"../../node_modules/.pnpm/thread-stream@4.0.0/node_modules/thread-stream/lib/indexes.js" (module1) {
|
|
14
15
|
"use strict";
|
|
15
16
|
const WRITE_INDEX = 4;
|
|
16
17
|
const READ_INDEX = 8;
|
|
@@ -19,45 +20,41 @@ var __webpack_modules__ = {
|
|
|
19
20
|
READ_INDEX
|
|
20
21
|
};
|
|
21
22
|
},
|
|
22
|
-
"../../node_modules/.pnpm/thread-stream@
|
|
23
|
+
"../../node_modules/.pnpm/thread-stream@4.0.0/node_modules/thread-stream/lib/wait.js" (module1) {
|
|
23
24
|
"use strict";
|
|
24
|
-
const
|
|
25
|
+
const WAIT_MS = 10000;
|
|
25
26
|
function wait(state, index, expected, timeout, done) {
|
|
26
|
-
const max = Date.now() + timeout;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (current === prior) check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : 2 * backoff);
|
|
36
|
-
else current === expected ? done(null, 'ok') : done(null, 'not-equal');
|
|
37
|
-
}, backoff);
|
|
27
|
+
const max = timeout === 1 / 0 ? 1 / 0 : Date.now() + timeout;
|
|
28
|
+
const check = ()=>{
|
|
29
|
+
const current = Atomics.load(state, index);
|
|
30
|
+
if (current === expected) return void done(null, 'ok');
|
|
31
|
+
if (max !== 1 / 0 && Date.now() > max) return void done(null, 'timed-out');
|
|
32
|
+
const remaining = max === 1 / 0 ? WAIT_MS : Math.min(WAIT_MS, Math.max(1, max - Date.now()));
|
|
33
|
+
const result = Atomics.waitAsync(state, index, current, remaining);
|
|
34
|
+
if (result.async) result.value.then(check);
|
|
35
|
+
else setImmediate(check);
|
|
38
36
|
};
|
|
39
|
-
check(
|
|
37
|
+
check();
|
|
40
38
|
}
|
|
41
39
|
function waitDiff(state, index, expected, timeout, done) {
|
|
42
|
-
const max = Date.now() + timeout;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (Date.now() > max) done(null, 'timed-out');
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}, backoff);
|
|
40
|
+
const max = timeout === 1 / 0 ? 1 / 0 : Date.now() + timeout;
|
|
41
|
+
const check = ()=>{
|
|
42
|
+
const current = Atomics.load(state, index);
|
|
43
|
+
if (current !== expected) return void done(null, 'ok');
|
|
44
|
+
if (max !== 1 / 0 && Date.now() > max) return void done(null, 'timed-out');
|
|
45
|
+
const remaining = max === 1 / 0 ? WAIT_MS : Math.min(WAIT_MS, Math.max(1, max - Date.now()));
|
|
46
|
+
const result = Atomics.waitAsync(state, index, expected, remaining);
|
|
47
|
+
if (result.async) result.value.then(check);
|
|
48
|
+
else setImmediate(check);
|
|
52
49
|
};
|
|
53
|
-
check(
|
|
50
|
+
check();
|
|
54
51
|
}
|
|
55
52
|
module1.exports = {
|
|
56
53
|
wait,
|
|
57
54
|
waitDiff
|
|
58
55
|
};
|
|
59
56
|
},
|
|
60
|
-
worker_threads
|
|
57
|
+
worker_threads (module1) {
|
|
61
58
|
"use strict";
|
|
62
59
|
module1.exports = require("worker_threads");
|
|
63
60
|
}
|
|
@@ -77,21 +74,17 @@ var __webpack_exports__ = {};
|
|
|
77
74
|
"use strict";
|
|
78
75
|
const { realImport, realRequire } = __webpack_require__("../../node_modules/.pnpm/real-require@0.2.0/node_modules/real-require/src/index.js");
|
|
79
76
|
const { workerData, parentPort } = __webpack_require__("worker_threads");
|
|
80
|
-
const { WRITE_INDEX, READ_INDEX } = __webpack_require__("../../node_modules/.pnpm/thread-stream@
|
|
81
|
-
const { waitDiff } = __webpack_require__("../../node_modules/.pnpm/thread-stream@
|
|
77
|
+
const { WRITE_INDEX, READ_INDEX } = __webpack_require__("../../node_modules/.pnpm/thread-stream@4.0.0/node_modules/thread-stream/lib/indexes.js");
|
|
78
|
+
const { waitDiff } = __webpack_require__("../../node_modules/.pnpm/thread-stream@4.0.0/node_modules/thread-stream/lib/wait.js");
|
|
82
79
|
const { dataBuf, filename, stateBuf } = workerData;
|
|
83
80
|
let destination;
|
|
84
81
|
const state = new Int32Array(stateBuf);
|
|
85
82
|
const data = Buffer.from(dataBuf);
|
|
83
|
+
const keepAlive = setInterval(()=>{}, 3600000);
|
|
86
84
|
async function start() {
|
|
87
85
|
let worker;
|
|
88
86
|
try {
|
|
89
|
-
|
|
90
|
-
if (process[Symbol.for('ts-node.register.instance')]) {
|
|
91
|
-
if (process.env.TS_NODE_DEV) realRequire('ts-node-dev');
|
|
92
|
-
} else realRequire('ts-node/register');
|
|
93
|
-
worker = realRequire(decodeURIComponent(filename.replace('win32' === process.platform ? 'file:///' : 'file://', '')));
|
|
94
|
-
} else worker = await realImport(filename);
|
|
87
|
+
worker = await realImport(filename);
|
|
95
88
|
} catch (error) {
|
|
96
89
|
if (('ENOTDIR' === error.code || 'ERR_MODULE_NOT_FOUND' === error.code) && filename.startsWith('file://')) worker = realRequire(decodeURIComponent(filename.replace('file://', '')));
|
|
97
90
|
else if (void 0 === error.code || 'ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING' === error.code) try {
|
|
@@ -99,6 +92,14 @@ var __webpack_exports__ = {};
|
|
|
99
92
|
} catch {
|
|
100
93
|
throw error;
|
|
101
94
|
}
|
|
95
|
+
else if (filename.endsWith('.ts') || filename.endsWith('.cts')) try {
|
|
96
|
+
if (process[Symbol.for('ts-node.register.instance')]) {
|
|
97
|
+
if (process.env.TS_NODE_DEV) realRequire('ts-node-dev');
|
|
98
|
+
} else realRequire('ts-node/register');
|
|
99
|
+
worker = realRequire(decodeURIComponent(filename.replace('win32' === process.platform ? 'file:///' : 'file://', '')));
|
|
100
|
+
} catch {
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
102
103
|
else throw error;
|
|
103
104
|
}
|
|
104
105
|
if ('object' == typeof worker) worker = worker.default;
|
|
@@ -118,6 +119,7 @@ var __webpack_exports__ = {};
|
|
|
118
119
|
const end = Atomics.load(state, WRITE_INDEX);
|
|
119
120
|
Atomics.store(state, READ_INDEX, end);
|
|
120
121
|
Atomics.notify(state, READ_INDEX);
|
|
122
|
+
clearInterval(keepAlive);
|
|
121
123
|
setImmediate(()=>{
|
|
122
124
|
process.exit(0);
|
|
123
125
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rife/logger",
|
|
3
|
-
"version": "0.0.6-beta.
|
|
3
|
+
"version": "0.0.6-beta.13",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -14,12 +14,20 @@
|
|
|
14
14
|
"types": "./src/pino/index.ts",
|
|
15
15
|
"require": "./dist/cjs/pino/index.cjs",
|
|
16
16
|
"import": "./dist/esm/pino/index.mjs"
|
|
17
|
+
},
|
|
18
|
+
"./worker": {
|
|
19
|
+
"types": "./src/worker/index.ts",
|
|
20
|
+
"require": "./dist/cjs/worker/index.cjs",
|
|
21
|
+
"import": "./dist/esm/worker/index.mjs"
|
|
17
22
|
}
|
|
18
23
|
},
|
|
19
24
|
"typesVersions": {
|
|
20
25
|
"*": {
|
|
21
26
|
"pino": [
|
|
22
27
|
"./src/pino"
|
|
28
|
+
],
|
|
29
|
+
"worker": [
|
|
30
|
+
"./src/worker"
|
|
23
31
|
]
|
|
24
32
|
}
|
|
25
33
|
},
|
|
@@ -29,15 +37,15 @@
|
|
|
29
37
|
"tsconfig.json"
|
|
30
38
|
],
|
|
31
39
|
"dependencies": {
|
|
32
|
-
"pino": "^10.1
|
|
33
|
-
"pino-pretty": "^13.1.
|
|
34
|
-
"pino-std-serializers": "^7.
|
|
35
|
-
"rotating-file-stream": "^3.2.
|
|
40
|
+
"pino": "^10.3.1",
|
|
41
|
+
"pino-pretty": "^13.1.3",
|
|
42
|
+
"pino-std-serializers": "^7.1.0",
|
|
43
|
+
"rotating-file-stream": "^3.2.9"
|
|
36
44
|
},
|
|
37
45
|
"devDependencies": {
|
|
38
|
-
"thread-stream": "
|
|
39
|
-
"@rife/cli": "0.0.6-beta.
|
|
40
|
-
"@rife/plugin-rstack": "0.0.1-beta.
|
|
46
|
+
"thread-stream": "^4.0.0",
|
|
47
|
+
"@rife/cli": "0.0.6-beta.22",
|
|
48
|
+
"@rife/plugin-rstack": "0.0.1-beta.20"
|
|
41
49
|
},
|
|
42
50
|
"scripts": {
|
|
43
51
|
"dev": "rife dev",
|
package/src/pino/index.ts
CHANGED
|
@@ -3,15 +3,20 @@ import path from 'path';
|
|
|
3
3
|
import pino from 'pino';
|
|
4
4
|
|
|
5
5
|
import { genTraceId, getTraceId, runInTrace } from '../trace';
|
|
6
|
+
export { pino };
|
|
6
7
|
|
|
7
8
|
declare var __isNodeSingleFileBundle: any;
|
|
8
9
|
declare var __isVite: any;
|
|
9
10
|
|
|
11
|
+
/** @ts-ignore 当前是cloudflare worker */
|
|
12
|
+
const isCFWorker = typeof WebSocketPair !== 'undefined';
|
|
13
|
+
|
|
10
14
|
// https://github.com/pinojs/pino/blob/master/docs/api.md
|
|
11
15
|
function getPinoConfig() {
|
|
12
16
|
const targets: any = [];
|
|
13
17
|
|
|
14
18
|
const rotate = `./rotate${path.extname(__filename)}`;
|
|
19
|
+
|
|
15
20
|
targets.push({
|
|
16
21
|
level: 'debug',
|
|
17
22
|
target: rotate,
|
|
@@ -52,16 +57,38 @@ function getPinoConfig() {
|
|
|
52
57
|
transport: { targets },
|
|
53
58
|
mixin(data: any) {
|
|
54
59
|
// {"level":30,"time":1726065716643,"pid":21968,"hostname":"Win-LH"}
|
|
55
|
-
// 基础字段不能重复
|
|
60
|
+
// 基础字段不能重复
|
|
61
|
+
const traceId = data?.traceId;
|
|
62
|
+
delete data.traceId;
|
|
56
63
|
delete data.level;
|
|
57
64
|
delete data.time;
|
|
58
65
|
delete data.pid;
|
|
59
66
|
delete data.name;
|
|
60
67
|
delete data.hostname;
|
|
61
|
-
if (!
|
|
68
|
+
if (!traceId) {
|
|
62
69
|
return { traceId: getTraceId() };
|
|
63
70
|
}
|
|
64
|
-
return {};
|
|
71
|
+
return { traceId };
|
|
72
|
+
},
|
|
73
|
+
// cloudfare worker 需要自己实现输出
|
|
74
|
+
browser: {
|
|
75
|
+
write: (o: any) => {
|
|
76
|
+
// https://github.com/pinojs/pino/blob/main/docs/api.md#level-1
|
|
77
|
+
const { name, time, level, ...rest } = o;
|
|
78
|
+
if (name) {
|
|
79
|
+
rest.message = rest.message ? `[${name}] ${rest.message}` : `[${name}]`;
|
|
80
|
+
}
|
|
81
|
+
if (!rest.traceId) {
|
|
82
|
+
rest.traceId = getTraceId();
|
|
83
|
+
}
|
|
84
|
+
if (level >= 50) {
|
|
85
|
+
console.error(rest);
|
|
86
|
+
} else if (level >= 40) {
|
|
87
|
+
console.warn(rest);
|
|
88
|
+
} else {
|
|
89
|
+
console.log(rest);
|
|
90
|
+
}
|
|
91
|
+
},
|
|
65
92
|
},
|
|
66
93
|
};
|
|
67
94
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
import { getTraceId } from '../trace';
|
|
5
|
+
|
|
6
|
+
// https://github.com/pinojs/pino/blob/master/docs/api.md
|
|
7
|
+
function getPinoConfig() {
|
|
8
|
+
const targets: any = [];
|
|
9
|
+
|
|
10
|
+
if (process.env.NODE_ENV === 'production') {
|
|
11
|
+
} else {
|
|
12
|
+
const rotate = `./rotate${path.extname(__filename)}`;
|
|
13
|
+
targets.push({
|
|
14
|
+
level: 'debug',
|
|
15
|
+
target: rotate,
|
|
16
|
+
options: { path: './logs/' },
|
|
17
|
+
});
|
|
18
|
+
targets.push({
|
|
19
|
+
level: 'debug',
|
|
20
|
+
target: 'pino-pretty', // must be installed separately,
|
|
21
|
+
options: {
|
|
22
|
+
// https://github.com/pinojs/pino-pretty?tab=readme-ov-file#options
|
|
23
|
+
ignore: 'pid',
|
|
24
|
+
messageKey: 'message',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const config: pino.LoggerOptions = {
|
|
30
|
+
transport: { targets },
|
|
31
|
+
mixin(data: any) {
|
|
32
|
+
// {"level":30,"time":1726065716643,"pid":21968,"hostname":"Win-LH"}
|
|
33
|
+
// 基础字段不能重复
|
|
34
|
+
const traceId = data?.traceId;
|
|
35
|
+
delete data.traceId;
|
|
36
|
+
delete data.level;
|
|
37
|
+
delete data.time;
|
|
38
|
+
delete data.pid;
|
|
39
|
+
delete data.name;
|
|
40
|
+
delete data.hostname;
|
|
41
|
+
if (!traceId) {
|
|
42
|
+
return { traceId: getTraceId() };
|
|
43
|
+
}
|
|
44
|
+
return { traceId };
|
|
45
|
+
},
|
|
46
|
+
browser: {
|
|
47
|
+
write: (o: any) => {
|
|
48
|
+
// https://github.com/pinojs/pino/blob/main/docs/api.md#level-1
|
|
49
|
+
const { name, time, level, ...rest } = o;
|
|
50
|
+
if (name) {
|
|
51
|
+
rest.message = rest.message ? `[${name}] ${rest.message}` : `[${name}]`;
|
|
52
|
+
}
|
|
53
|
+
if (!rest.traceId) {
|
|
54
|
+
rest.traceId = getTraceId();
|
|
55
|
+
}
|
|
56
|
+
if (level >= 50) {
|
|
57
|
+
console.error(rest);
|
|
58
|
+
} else if (level >= 40) {
|
|
59
|
+
console.warn(rest);
|
|
60
|
+
} else {
|
|
61
|
+
console.log(rest);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
return config;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function createLogger() {
|
|
71
|
+
const logger = pino({
|
|
72
|
+
// https://github.com/pinojs/pino/blob/main/docs/api.md#opt-serializers
|
|
73
|
+
base: { pid: process.pid },
|
|
74
|
+
messageKey: 'message',
|
|
75
|
+
errorKey: 'error',
|
|
76
|
+
timestamp: pino.stdTimeFunctions.epochTime,
|
|
77
|
+
// timestamp: process.env.NODE_ENV === 'production' ? pino.stdTimeFunctions.epochTime : pino.stdTimeFunctions.isoTime,
|
|
78
|
+
...getPinoConfig(),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
return { logger };
|
|
82
|
+
}
|
package/src/test.ts
CHANGED
|
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'development';
|
|
|
2
2
|
// process.env.NODE_ENV = 'production';
|
|
3
3
|
|
|
4
4
|
import { createLogger } from './pino';
|
|
5
|
-
import { genTraceId } from './trace';
|
|
5
|
+
import { genTraceId, runInTrace } from './trace';
|
|
6
6
|
|
|
7
7
|
const { logger } = createLogger();
|
|
8
8
|
|
|
@@ -16,4 +16,7 @@ const log = logger.child({ name: 'name123', traceId: genTraceId() }, { msgPrefix
|
|
|
16
16
|
log.error(new Error('cause', { cause: new Error('789') }));
|
|
17
17
|
log.error({ error: new Error('error data'), data: 2 });
|
|
18
18
|
log.info({ c: 1, name: '========' }, 'name overide');
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
runInTrace({ traceId: genTraceId() }, () => {
|
|
21
|
+
log.info(1);
|
|
22
|
+
});
|