@rife/logger 0.0.5-beta.20 → 0.0.5-beta.21

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/env.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const isDev: () => boolean;
2
1
  export declare const isProd: () => boolean;
2
+ export declare const isDev: () => boolean;
package/dist/env.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isProd = exports.isDev = void 0;
4
- const isDev = () => process.env.NODE_ENV === 'development';
5
- exports.isDev = isDev;
3
+ exports.isDev = exports.isProd = void 0;
6
4
  const isProd = () => process.env.NODE_ENV === 'production';
7
5
  exports.isProd = isProd;
6
+ const isDev = () => !(0, exports.isProd)();
7
+ exports.isDev = isDev;
package/dist/pino.js CHANGED
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createHttpLogger = exports.createLogger = void 0;
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
7
- const trace_1 = require("./trace");
8
6
  const env_1 = require("./env");
9
7
  function getPinoConfig() {
10
8
  const targets = [];
@@ -15,63 +13,47 @@ function getPinoConfig() {
15
13
  options: {},
16
14
  });
17
15
  }
18
- if ((0, env_1.isDev)() || (0, env_1.isProd)()) {
19
- targets.push({
20
- level: 'debug',
21
- target: 'pino/file',
22
- options: { destination: './.logs/1.log', mkdir: true },
23
- });
24
- }
16
+ targets.push({
17
+ level: 'debug',
18
+ target: 'pino/file',
19
+ options: { destination: './.logs/1.log', mkdir: true },
20
+ });
25
21
  const config = {
26
- base: { pid: undefined, hostname: undefined },
22
+ // base: { pid: undefined, hostname: undefined },
27
23
  transport: { targets },
28
24
  };
29
25
  return config;
30
26
  }
27
+ const startTime = Symbol('startTime');
31
28
  function createLogger(options) {
32
29
  let data = {};
33
30
  const logger = (0, pino_1.default)({
34
31
  ...getPinoConfig(),
35
32
  mixin() {
36
- return { traceId: (0, trace_1.getTraceId)(), ...data };
33
+ return { ...data };
37
34
  },
38
35
  });
39
- const setData = (value) => {
40
- data = { ...data, ...value };
41
- };
42
- return {
43
- info: logger.info.bind(logger),
44
- warn: logger.warn.bind(logger),
45
- error: logger.error.bind(logger),
46
- setData,
36
+ const express = () => {
37
+ const { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers');
38
+ return (req, res, next) => {
39
+ const response = res;
40
+ response[startTime] = response[startTime] || Date.now();
41
+ const traceId = req.headers['trace-id'];
42
+ const onComplete = () => {
43
+ res.removeListener('close', onComplete);
44
+ res.removeListener('finish', onComplete);
45
+ res.removeListener('error', onComplete);
46
+ const duration = Date.now() - response[startTime];
47
+ logger.info({ traceId, duration, request: mapHttpRequest(req).req, response: mapHttpResponse(res).res });
48
+ };
49
+ res.on('close', onComplete);
50
+ res.on('finish', onComplete);
51
+ res.on('error', onComplete);
52
+ next();
53
+ };
47
54
  };
55
+ const instance = logger;
56
+ instance.express = express;
57
+ return instance;
48
58
  }
49
59
  exports.createLogger = createLogger;
50
- function createHttpLogger() {
51
- const { pinoHttp } = require('pino-http');
52
- const logger = pinoHttp({
53
- ...getPinoConfig(),
54
- mixin() {
55
- return { traceId: (0, trace_1.getTraceId)() };
56
- },
57
- genReqId: trace_1.getTraceId,
58
- customAttributeKeys: {
59
- req: 'request',
60
- res: 'response',
61
- responseTime: 'duration',
62
- },
63
- serializers: {
64
- req(req) {
65
- // console.log('==========req.raw.body', req.raw.body);
66
- req.body = req.raw.body;
67
- return req;
68
- },
69
- res(res) {
70
- // console.log('==========req.raw.body', res.raw.);
71
- return res;
72
- },
73
- },
74
- });
75
- return logger;
76
- }
77
- exports.createHttpLogger = createHttpLogger;
package/dist/test.js CHANGED
@@ -17,19 +17,8 @@ process.env.NODE_ENV = 'development';
17
17
  const pino_1 = require("./pino");
18
18
  const trace_1 = require("./trace");
19
19
  const logger = (0, pino_1.createLogger)();
20
- logger.debug({ data: { a: 1 } });
21
- logger.warn({ data: { a: 2 } });
20
+ logger.warn({ data: { a: 2 } }, '123');
22
21
  const e = new Error('123');
23
- logger.error(e, '123');
24
22
  (0, trace_1.runInTrace)(() => {
25
- logger.info({ request: { method: 'POST', path: '/123', query: {}, body: {} }, response: 2, data: { a: 1 } }, '请求结束');
26
- logger.info('123');
27
- logger.info('123');
28
- logger.info('123');
29
- logger.info('123');
30
- logger.info('123');
31
- logger.info('123');
32
- logger.info('123');
33
- logger.info('123');
34
- logger.info('123');
23
+ logger.error(e, '123');
35
24
  });
package/dist/trace.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export declare const getNewTraceId: (size?: number | undefined) => string;
2
2
  export declare function runInTrace<T>(fn: (...args: any[]) => T): T;
3
3
  export declare function getTraceId(): any;
4
+ export declare function setTraceId(): any;
package/dist/trace.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTraceId = exports.runInTrace = exports.getNewTraceId = void 0;
3
+ exports.setTraceId = exports.getTraceId = exports.runInTrace = exports.getNewTraceId = void 0;
4
4
  const async_hooks_1 = require("async_hooks");
5
5
  const nanoid_1 = require("nanoid");
6
6
  const als = new async_hooks_1.AsyncLocalStorage();
@@ -14,3 +14,7 @@ function getTraceId() {
14
14
  return als.getStore()?.traceId;
15
15
  }
16
16
  exports.getTraceId = getTraceId;
17
+ function setTraceId() {
18
+ return als.getStore()?.traceId;
19
+ }
20
+ exports.setTraceId = setTraceId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rife/logger",
3
- "version": "0.0.5-beta.20",
3
+ "version": "0.0.5-beta.21",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./src/index.ts",
@@ -30,10 +30,11 @@
30
30
  "pino": "^8.16.1",
31
31
  "pino-http": "^8.5.1",
32
32
  "pino-pretty": "^10.2.3",
33
+ "pino-std-serializers": "^6.2.2",
33
34
  "safe-stable-stringify": "^2.4.3",
34
35
  "winston": "^3.9.0",
35
36
  "winston-daily-rotate-file": "^4.7.1",
36
- "@rife/config": "0.0.5-beta.20"
37
+ "@rife/config": "0.0.5-beta.21"
37
38
  },
38
39
  "scripts": {
39
40
  "dev": "infra dev",
package/src/env.ts CHANGED
@@ -1,2 +1,3 @@
1
- export const isDev = () => process.env.NODE_ENV === 'development';
2
1
  export const isProd = () => process.env.NODE_ENV === 'production';
2
+
3
+ export const isDev = () => !isProd();
package/src/pino.ts CHANGED
@@ -2,9 +2,10 @@ import pino from 'pino';
2
2
  // https://github.com/pinojs/pino/blob/master/docs/api.md
3
3
 
4
4
  import { getTraceId } from './trace';
5
- import { isDev, isProd } from './env';
5
+ import { isDev } from './env';
6
6
 
7
7
  export interface ILogger {
8
+ debug: pino.LogFn;
8
9
  info: pino.LogFn;
9
10
  warn: pino.LogFn;
10
11
  error: pino.LogFn;
@@ -26,69 +27,59 @@ function getPinoConfig() {
26
27
  });
27
28
  }
28
29
 
29
- if (isDev() || isProd()) {
30
- targets.push({
31
- level: 'debug',
32
- target: 'pino/file',
33
- options: { destination: './.logs/1.log', mkdir: true },
34
- });
35
- }
30
+ targets.push({
31
+ level: 'debug',
32
+ target: 'pino/file',
33
+ options: { destination: './.logs/1.log', mkdir: true },
34
+ });
35
+
36
36
  const config: pino.LoggerOptions = {
37
- base: { pid: undefined, hostname: undefined },
37
+ // base: { pid: undefined, hostname: undefined },
38
38
  transport: { targets },
39
39
  };
40
40
 
41
41
  return config;
42
42
  }
43
43
 
44
- export function createLogger(options?: ILogger.Options): ILogger {
44
+ const startTime = Symbol('startTime');
45
+
46
+ export function createLogger(options?: ILogger.Options) {
45
47
  let data: any = {};
46
48
 
47
49
  const logger = pino({
48
50
  ...getPinoConfig(),
49
51
  mixin() {
50
- return { traceId: getTraceId(), ...data };
52
+ return { ...data };
51
53
  },
52
54
  });
53
55
 
54
- const setData = (value: any) => {
55
- data = { ...data, ...value };
56
- };
56
+ const express = () => {
57
+ const { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers') as typeof import('pino-std-serializers');
57
58
 
58
- return {
59
- info: logger.info.bind(logger),
60
- warn: logger.warn.bind(logger),
61
- error: logger.error.bind(logger),
62
- setData,
63
- };
64
- }
59
+ return (req: any, res: any, next: any) => {
60
+ const response: any = res;
61
+ response[startTime] = response[startTime] || Date.now();
62
+ const traceId = req.headers['trace-id'];
65
63
 
66
- export function createHttpLogger() {
67
- const { pinoHttp } = require('pino-http') as typeof import('pino-http');
64
+ const onComplete = () => {
65
+ res.removeListener('close', onComplete);
66
+ res.removeListener('finish', onComplete);
67
+ res.removeListener('error', onComplete);
68
+ const duration = Date.now() - response[startTime];
68
69
 
69
- const logger = pinoHttp({
70
- ...getPinoConfig(),
71
- mixin() {
72
- return { traceId: getTraceId() };
73
- },
74
- genReqId: getTraceId,
75
- customAttributeKeys: {
76
- req: 'request',
77
- res: 'response',
78
- responseTime: 'duration',
79
- },
80
- serializers: {
81
- req(req) {
82
- // console.log('==========req.raw.body', req.raw.body);
83
- req.body = req.raw.body;
84
- return req;
85
- },
86
- res(res) {
87
- // console.log('==========req.raw.body', res.raw.);
88
- return res;
89
- },
90
- },
91
- });
70
+ logger.info({ traceId, duration, request: mapHttpRequest(req).req, response: mapHttpResponse(res).res });
71
+ };
72
+
73
+ res.on('close', onComplete);
74
+ res.on('finish', onComplete);
75
+ res.on('error', onComplete);
76
+
77
+ next();
78
+ };
79
+ };
80
+ const instance = logger as typeof logger & { express: typeof express };
81
+
82
+ instance.express = express;
92
83
 
93
- return logger;
84
+ return instance;
94
85
  }
package/src/test.ts CHANGED
@@ -20,21 +20,10 @@ import { createLogger } from './pino';
20
20
  import { runInTrace } from './trace';
21
21
 
22
22
  const logger = createLogger();
23
- logger.debug({ data: { a: 1 } });
24
- logger.warn({ data: { a: 2 } });
23
+ logger.warn({ data: { a: 2 } }, '123');
25
24
 
26
25
  const e = new Error('123');
27
- logger.error(e, '123');
28
26
 
29
27
  runInTrace(() => {
30
- logger.info({ request: { method: 'POST', path: '/123', query: {}, body: {} }, response: 2, data: { a: 1 } }, '请求结束');
31
- logger.info('123');
32
- logger.info('123');
33
- logger.info('123');
34
- logger.info('123');
35
- logger.info('123');
36
- logger.info('123');
37
- logger.info('123');
38
- logger.info('123');
39
- logger.info('123');
28
+ logger.error(e, '123');
40
29
  });
package/src/trace.ts CHANGED
@@ -14,3 +14,7 @@ export function runInTrace<T>(fn: (...args: any[]) => T): T {
14
14
  export function getTraceId() {
15
15
  return als.getStore()?.traceId;
16
16
  }
17
+
18
+ export function setTraceId() {
19
+ return als.getStore()?.traceId;
20
+ }
package/tsconfig.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "extends": "@rife/config/tsconfig.json", // 继承 packages 目录下通用配置
3
3
  "compilerOptions": {
4
4
  "outDir": "dist",
5
- "declaration": true,
5
+ "declaration": false,
6
6
  "baseUrl": ".",
7
7
  "paths": {
8
8
  "@/*": ["./src/*"]