@rife/logger 0.0.5-beta.25 → 0.0.5-beta.27
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/pino.js +15 -8
- package/dist/pino.js.map +1 -1
- package/dist/rotate.js +26 -0
- package/dist/rotate.js.map +1 -0
- package/dist/test.js +6 -6
- package/dist/test.js.map +1 -1
- package/dist/trace.js +5 -7
- package/dist/trace.js.map +1 -1
- package/package.json +7 -5
- package/src/pino.ts +14 -11
- package/src/rotate.ts +32 -0
- package/src/test.ts +6 -6
- package/src/trace.ts +4 -8
package/dist/pino.js
CHANGED
|
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createLogger = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const pino_1 = tslib_1.__importDefault(require("pino"));
|
|
6
|
+
// https://github.com/pinojs/pino/blob/master/docs/api.md
|
|
6
7
|
const env_1 = require("./env");
|
|
8
|
+
const trace_1 = require("./trace");
|
|
7
9
|
function getPinoConfig() {
|
|
8
10
|
const targets = [];
|
|
9
11
|
if ((0, env_1.isDev)()) {
|
|
@@ -15,23 +17,25 @@ function getPinoConfig() {
|
|
|
15
17
|
}
|
|
16
18
|
targets.push({
|
|
17
19
|
level: 'debug',
|
|
18
|
-
target: '
|
|
19
|
-
options: {
|
|
20
|
+
target: './rotate',
|
|
21
|
+
options: { path: './.logs/' },
|
|
20
22
|
});
|
|
21
23
|
const config = {
|
|
22
24
|
// base: { pid: undefined, hostname: undefined },
|
|
23
25
|
transport: { targets },
|
|
26
|
+
mixin(data) {
|
|
27
|
+
if (!data?.traceId) {
|
|
28
|
+
return { traceId: (0, trace_1.getTraceId)() };
|
|
29
|
+
}
|
|
30
|
+
return {};
|
|
31
|
+
},
|
|
24
32
|
};
|
|
25
33
|
return config;
|
|
26
34
|
}
|
|
27
35
|
const startTime = Symbol('startTime');
|
|
28
36
|
function createLogger(options) {
|
|
29
|
-
let data = {};
|
|
30
37
|
const logger = (0, pino_1.default)({
|
|
31
38
|
...getPinoConfig(),
|
|
32
|
-
mixin() {
|
|
33
|
-
return { ...data };
|
|
34
|
-
},
|
|
35
39
|
});
|
|
36
40
|
const express = () => {
|
|
37
41
|
const { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers');
|
|
@@ -39,17 +43,20 @@ function createLogger(options) {
|
|
|
39
43
|
const response = res;
|
|
40
44
|
response[startTime] = response[startTime] || Date.now();
|
|
41
45
|
const traceId = req.headers['trace-id'];
|
|
46
|
+
if (traceId) {
|
|
47
|
+
(0, trace_1.setTraceId)(traceId);
|
|
48
|
+
}
|
|
42
49
|
const onComplete = () => {
|
|
43
50
|
res.removeListener('close', onComplete);
|
|
44
51
|
res.removeListener('finish', onComplete);
|
|
45
52
|
res.removeListener('error', onComplete);
|
|
46
53
|
const duration = Date.now() - response[startTime];
|
|
47
|
-
logger.info({
|
|
54
|
+
logger.info({ duration, request: mapHttpRequest(req).req, response: mapHttpResponse(res).res }, 'request');
|
|
48
55
|
};
|
|
49
56
|
res.on('close', onComplete);
|
|
50
57
|
res.on('finish', onComplete);
|
|
51
58
|
res.on('error', onComplete);
|
|
52
|
-
|
|
59
|
+
(0, trace_1.runInTrace)(next);
|
|
53
60
|
};
|
|
54
61
|
};
|
|
55
62
|
const instance = logger;
|
package/dist/pino.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../src/pino.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;
|
|
1
|
+
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../src/pino.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;AACxB,yDAAyD;AAEzD,+BAA8B;AAC9B,mCAA6D;AAc7D,SAAS,aAAa;IAClB,MAAM,OAAO,GAAQ,EAAE,CAAC;IAExB,IAAI,IAAA,WAAK,GAAE,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,aAAa,EAAE,gCAAgC;YACvD,OAAO,EAAE,EAAE;SACd,CAAC,CAAC;IACP,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACT,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;KAChC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAuB;QAC/B,iDAAiD;QACjD,SAAS,EAAE,EAAE,OAAO,EAAE;QACtB,KAAK,CAAC,IAAS;YACX,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;gBACjB,OAAO,EAAE,OAAO,EAAE,IAAA,kBAAU,GAAE,EAAE,CAAC;YACrC,CAAC;YACD,OAAO,EAAE,CAAC;QACd,CAAC;KACJ,CAAC;IAEF,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAEtC,SAAgB,YAAY,CAAC,OAAyB;IAClD,MAAM,MAAM,GAAG,IAAA,cAAI,EAAC;QAChB,GAAG,aAAa,EAAE;KACrB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAA0C,CAAC;QAErH,OAAO,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAQ,GAAG,CAAC;YAC1B,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,OAAO,EAAE,CAAC;gBACV,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YACD,MAAM,UAAU,GAAG,GAAG,EAAE;gBACpB,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACxC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBACzC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAElD,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;YAC/G,CAAC,CAAC;YAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC7B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAE5B,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;IACN,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,MAAqD,CAAC;IAEvE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;IAE3B,OAAO,QAAQ,CAAC;AACpB,CAAC;AApCD,oCAoCC"}
|
package/dist/rotate.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const generator = (time, index) => {
|
|
4
|
+
if (!time) {
|
|
5
|
+
return 'server.log';
|
|
6
|
+
}
|
|
7
|
+
time = new Date(time);
|
|
8
|
+
const month = String(time.getMonth() + 1).padStart(2, '0');
|
|
9
|
+
const day = String(time.getDate()).padStart(2, '0');
|
|
10
|
+
if (index) {
|
|
11
|
+
const count = String(index).padStart(3, '0');
|
|
12
|
+
return `server.${time.getFullYear()}${month}${day}-${count}.log`;
|
|
13
|
+
}
|
|
14
|
+
return `server.${time.getFullYear()}${month}${day}.log`;
|
|
15
|
+
};
|
|
16
|
+
exports.default = (options) => {
|
|
17
|
+
const { createStream } = require('rotating-file-stream');
|
|
18
|
+
const { path } = options;
|
|
19
|
+
return createStream(generator, {
|
|
20
|
+
size: '50M',
|
|
21
|
+
maxSize: '500M',
|
|
22
|
+
interval: '1d',
|
|
23
|
+
path,
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=rotate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotate.js","sourceRoot":"","sources":["../src/rotate.ts"],"names":[],"mappings":";;AAMA,MAAM,SAAS,GAAG,CAAC,IAAmB,EAAE,KAAc,EAAE,EAAE;IACtD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,KAAK,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,UAAU,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI,KAAK,MAAM,CAAC;IACrE,CAAC;IACD,OAAO,UAAU,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,GAAG,GAAG,MAAM,CAAC;AAC5D,CAAC,CAAC;AAEF,kBAAe,CAAC,OAAsC,EAAE,EAAE;IACtD,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAA0C,CAAC;IAElG,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,OAAO,YAAY,CAAC,SAAS,EAAE;QAC3B,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,IAAI;QACd,IAAI;KACP,CAAC,CAAC;AACP,CAAC,CAAC"}
|
package/dist/test.js
CHANGED
|
@@ -15,11 +15,11 @@ process.env.NODE_ENV = 'development';
|
|
|
15
15
|
// logger.warn('execed');
|
|
16
16
|
// logger.error(new Error('not found'));
|
|
17
17
|
const pino_1 = require("./pino");
|
|
18
|
-
const trace_1 = require("./trace");
|
|
19
18
|
const logger = (0, pino_1.createLogger)();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
19
|
+
const obj = {
|
|
20
|
+
i: 1,
|
|
21
|
+
};
|
|
22
|
+
setInterval(() => {
|
|
23
|
+
logger.warn(`${obj.i++}`);
|
|
24
|
+
}, 1000);
|
|
25
25
|
//# sourceMappingURL=test.js.map
|
package/dist/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC;AACrC,uCAAuC;AACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC;AAErC,4CAA4C;AAE5C,0GAA0G;AAE1G,4DAA4D;AAC5D,iCAAiC;AACjC,6BAA6B;AAC7B,+BAA+B;AAC/B,gCAAgC;AAChC,6BAA6B;AAC7B,qBAAqB;AACrB,yBAAyB;AACzB,wCAAwC;AAExC,iCAAsC;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC;AACrC,uCAAuC;AACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC;AAErC,4CAA4C;AAE5C,0GAA0G;AAE1G,4DAA4D;AAC5D,iCAAiC;AACjC,6BAA6B;AAC7B,+BAA+B;AAC/B,gCAAgC;AAChC,6BAA6B;AAC7B,qBAAqB;AACrB,yBAAyB;AACzB,wCAAwC;AAExC,iCAAsC;AAGtC,MAAM,MAAM,GAAG,IAAA,mBAAY,GAAE,CAAC;AAE9B,MAAM,GAAG,GAAG;IACR,CAAC,EAAE,CAAC;CACP,CAAC;AACF,WAAW,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC,EAAE,IAAI,CAAC,CAAC"}
|
package/dist/trace.js
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setTraceId = exports.getTraceId = exports.runInTrace =
|
|
3
|
+
exports.setTraceId = exports.getTraceId = exports.runInTrace = void 0;
|
|
4
4
|
const async_hooks_1 = require("async_hooks");
|
|
5
|
-
const nanoid_1 = require("nanoid");
|
|
6
5
|
const als = new async_hooks_1.AsyncLocalStorage();
|
|
7
|
-
// https://github.com/CyberAP/nanoid-dictionary/blob/master/src/nolookalikes.js
|
|
8
|
-
exports.getNewTraceId = (0, nanoid_1.customAlphabet)('346789ABCDEFGHJKLMNPQRTUVWXYabcdefghijkmnpqrtwxyz', 5);
|
|
9
6
|
function runInTrace(fn) {
|
|
10
|
-
|
|
7
|
+
const { v4 } = require('uuid');
|
|
8
|
+
return als.run({ traceId: v4() }, fn);
|
|
11
9
|
}
|
|
12
10
|
exports.runInTrace = runInTrace;
|
|
13
11
|
function getTraceId() {
|
|
14
12
|
return als.getStore()?.traceId;
|
|
15
13
|
}
|
|
16
14
|
exports.getTraceId = getTraceId;
|
|
17
|
-
function setTraceId() {
|
|
18
|
-
return als.
|
|
15
|
+
function setTraceId(traceId) {
|
|
16
|
+
return als.enterWith({ traceId });
|
|
19
17
|
}
|
|
20
18
|
exports.setTraceId = setTraceId;
|
|
21
19
|
//# sourceMappingURL=trace.js.map
|
package/dist/trace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAEhD,
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAEhD,MAAM,GAAG,GAAG,IAAI,+BAAiB,EAA6B,CAAC;AAE/D,SAAgB,UAAU,CAAI,EAAyB;IACnD,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAHD,gCAGC;AAED,SAAgB,UAAU;IACtB,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC;AACnC,CAAC;AAFD,gCAEC;AAED,SAAgB,UAAU,CAAC,OAAe;IACtC,OAAO,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC;AAFD,gCAEC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rife/logger",
|
|
3
|
-
"version": "0.0.5-beta.
|
|
3
|
+
"version": "0.0.5-beta.27",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -9,13 +9,14 @@
|
|
|
9
9
|
"require": "./dist/index.js"
|
|
10
10
|
},
|
|
11
11
|
"./pino": {
|
|
12
|
-
"require": "./dist/pino.js"
|
|
12
|
+
"require": "./dist/pino.js",
|
|
13
|
+
"types": "./src/pino.ts"
|
|
13
14
|
}
|
|
14
15
|
},
|
|
15
16
|
"typesVersions": {
|
|
16
17
|
"*": {
|
|
17
18
|
"pino": [
|
|
18
|
-
"./src/pino"
|
|
19
|
+
"./src/pino.ts"
|
|
19
20
|
]
|
|
20
21
|
}
|
|
21
22
|
},
|
|
@@ -26,15 +27,16 @@
|
|
|
26
27
|
],
|
|
27
28
|
"dependencies": {
|
|
28
29
|
"chalk": "4",
|
|
29
|
-
"nanoid": "^3.3.6",
|
|
30
30
|
"pino": "^8.16.1",
|
|
31
31
|
"pino-http": "^8.5.1",
|
|
32
32
|
"pino-pretty": "^10.2.3",
|
|
33
33
|
"pino-std-serializers": "^6.2.2",
|
|
34
|
+
"rotating-file-stream": "^3.2.1",
|
|
34
35
|
"safe-stable-stringify": "^2.4.3",
|
|
36
|
+
"uuid": "^9.0.1",
|
|
35
37
|
"winston": "^3.9.0",
|
|
36
38
|
"winston-daily-rotate-file": "^4.7.1",
|
|
37
|
-
"@rife/config": "0.0.5-beta.
|
|
39
|
+
"@rife/config": "0.0.5-beta.27"
|
|
38
40
|
},
|
|
39
41
|
"scripts": {
|
|
40
42
|
"dev": "infra dev",
|
package/src/pino.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import pino from 'pino';
|
|
2
2
|
// https://github.com/pinojs/pino/blob/master/docs/api.md
|
|
3
3
|
|
|
4
|
-
import { getTraceId } from './trace';
|
|
5
4
|
import { isDev } from './env';
|
|
5
|
+
import { getTraceId, runInTrace, setTraceId } from './trace';
|
|
6
6
|
|
|
7
7
|
export interface ILogger {
|
|
8
8
|
debug: pino.LogFn;
|
|
@@ -29,13 +29,19 @@ function getPinoConfig() {
|
|
|
29
29
|
|
|
30
30
|
targets.push({
|
|
31
31
|
level: 'debug',
|
|
32
|
-
target: '
|
|
33
|
-
options: {
|
|
32
|
+
target: './rotate',
|
|
33
|
+
options: { path: './.logs/' },
|
|
34
34
|
});
|
|
35
35
|
|
|
36
36
|
const config: pino.LoggerOptions = {
|
|
37
37
|
// base: { pid: undefined, hostname: undefined },
|
|
38
38
|
transport: { targets },
|
|
39
|
+
mixin(data: any) {
|
|
40
|
+
if (!data?.traceId) {
|
|
41
|
+
return { traceId: getTraceId() };
|
|
42
|
+
}
|
|
43
|
+
return {};
|
|
44
|
+
},
|
|
39
45
|
};
|
|
40
46
|
|
|
41
47
|
return config;
|
|
@@ -44,13 +50,8 @@ function getPinoConfig() {
|
|
|
44
50
|
const startTime = Symbol('startTime');
|
|
45
51
|
|
|
46
52
|
export function createLogger(options?: ILogger.Options) {
|
|
47
|
-
let data: any = {};
|
|
48
|
-
|
|
49
53
|
const logger = pino({
|
|
50
54
|
...getPinoConfig(),
|
|
51
|
-
mixin() {
|
|
52
|
-
return { ...data };
|
|
53
|
-
},
|
|
54
55
|
});
|
|
55
56
|
|
|
56
57
|
const express = () => {
|
|
@@ -60,21 +61,23 @@ export function createLogger(options?: ILogger.Options) {
|
|
|
60
61
|
const response: any = res;
|
|
61
62
|
response[startTime] = response[startTime] || Date.now();
|
|
62
63
|
const traceId = req.headers['trace-id'];
|
|
63
|
-
|
|
64
|
+
if (traceId) {
|
|
65
|
+
setTraceId(traceId);
|
|
66
|
+
}
|
|
64
67
|
const onComplete = () => {
|
|
65
68
|
res.removeListener('close', onComplete);
|
|
66
69
|
res.removeListener('finish', onComplete);
|
|
67
70
|
res.removeListener('error', onComplete);
|
|
68
71
|
const duration = Date.now() - response[startTime];
|
|
69
72
|
|
|
70
|
-
logger.info({
|
|
73
|
+
logger.info({ duration, request: mapHttpRequest(req).req, response: mapHttpResponse(res).res }, 'request');
|
|
71
74
|
};
|
|
72
75
|
|
|
73
76
|
res.on('close', onComplete);
|
|
74
77
|
res.on('finish', onComplete);
|
|
75
78
|
res.on('error', onComplete);
|
|
76
79
|
|
|
77
|
-
next
|
|
80
|
+
runInTrace(next);
|
|
78
81
|
};
|
|
79
82
|
};
|
|
80
83
|
const instance = logger as typeof logger & { express: typeof express };
|
package/src/rotate.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Options } from 'rotating-file-stream';
|
|
2
|
+
|
|
3
|
+
export interface PinoRotatingFileStreamOptions extends Options {
|
|
4
|
+
path: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const generator = (time: number | Date, index?: number) => {
|
|
8
|
+
if (!time) {
|
|
9
|
+
return 'server.log';
|
|
10
|
+
}
|
|
11
|
+
time = new Date(time);
|
|
12
|
+
|
|
13
|
+
const month = String(time.getMonth() + 1).padStart(2, '0');
|
|
14
|
+
const day = String(time.getDate()).padStart(2, '0');
|
|
15
|
+
if (index) {
|
|
16
|
+
const count = String(index).padStart(3, '0');
|
|
17
|
+
return `server.${time.getFullYear()}${month}${day}-${count}.log`;
|
|
18
|
+
}
|
|
19
|
+
return `server.${time.getFullYear()}${month}${day}.log`;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default (options: PinoRotatingFileStreamOptions) => {
|
|
23
|
+
const { createStream } = require('rotating-file-stream') as typeof import('rotating-file-stream');
|
|
24
|
+
|
|
25
|
+
const { path } = options;
|
|
26
|
+
return createStream(generator, {
|
|
27
|
+
size: '50M',
|
|
28
|
+
maxSize: '500M',
|
|
29
|
+
interval: '1d',
|
|
30
|
+
path,
|
|
31
|
+
});
|
|
32
|
+
};
|
package/src/test.ts
CHANGED
|
@@ -20,10 +20,10 @@ import { createLogger } from './pino';
|
|
|
20
20
|
import { runInTrace } from './trace';
|
|
21
21
|
|
|
22
22
|
const logger = createLogger();
|
|
23
|
-
logger.warn({ data: { a: 2 } }, '123');
|
|
24
23
|
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
24
|
+
const obj = {
|
|
25
|
+
i: 1,
|
|
26
|
+
};
|
|
27
|
+
setInterval(() => {
|
|
28
|
+
logger.warn(`${obj.i++}`);
|
|
29
|
+
}, 1000);
|
package/src/trace.ts
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
2
2
|
|
|
3
|
-
import { customAlphabet } from 'nanoid';
|
|
4
|
-
|
|
5
3
|
const als = new AsyncLocalStorage<{ traceId: string } & any>();
|
|
6
4
|
|
|
7
|
-
// https://github.com/CyberAP/nanoid-dictionary/blob/master/src/nolookalikes.js
|
|
8
|
-
export const getNewTraceId = customAlphabet('346789ABCDEFGHJKLMNPQRTUVWXYabcdefghijkmnpqrtwxyz', 5);
|
|
9
|
-
|
|
10
5
|
export function runInTrace<T>(fn: (...args: any[]) => T): T {
|
|
11
|
-
|
|
6
|
+
const { v4 } = require('uuid');
|
|
7
|
+
return als.run({ traceId: v4() }, fn);
|
|
12
8
|
}
|
|
13
9
|
|
|
14
10
|
export function getTraceId() {
|
|
15
11
|
return als.getStore()?.traceId;
|
|
16
12
|
}
|
|
17
13
|
|
|
18
|
-
export function setTraceId() {
|
|
19
|
-
return als.
|
|
14
|
+
export function setTraceId(traceId: string) {
|
|
15
|
+
return als.enterWith({ traceId });
|
|
20
16
|
}
|