@rife/logger 0.0.5-beta.43 → 0.0.5-beta.44

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.
Files changed (2) hide show
  1. package/package.json +2 -2
  2. package/src/pino.ts +88 -88
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rife/logger",
3
- "version": "0.0.5-beta.43",
3
+ "version": "0.0.5-beta.44",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./src/index.ts",
@@ -36,7 +36,7 @@
36
36
  "safe-stable-stringify": "^2.4.3",
37
37
  "winston": "^3.9.0",
38
38
  "winston-daily-rotate-file": "^4.7.1",
39
- "@rife/config": "0.0.5-beta.43"
39
+ "@rife/config": "0.0.5-beta.44"
40
40
  },
41
41
  "scripts": {
42
42
  "dev": "infra dev",
package/src/pino.ts CHANGED
@@ -1,88 +1,88 @@
1
- import pino from 'pino';
2
- // https://github.com/pinojs/pino/blob/master/docs/api.md
3
-
4
- import { isDev } from './env';
5
- import { genTraceId, getTraceId, runInTrace } from './trace';
6
-
7
- export interface ILogger {
8
- debug: pino.LogFn;
9
- info: pino.LogFn;
10
- warn: pino.LogFn;
11
- error: pino.LogFn;
12
- setData: (value: any) => any;
13
- }
14
-
15
- export namespace ILogger {
16
- export interface Options {}
17
- }
18
-
19
- function getPinoConfig() {
20
- const targets: any = [];
21
-
22
- if (isDev()) {
23
- targets.push({
24
- level: 'debug',
25
- target: 'pino-pretty', // must be installed separately,
26
- options: {},
27
- });
28
- }
29
-
30
- targets.push({
31
- level: 'debug',
32
- target: './rotate',
33
- options: { path: './.logs/' },
34
- });
35
-
36
- const config: pino.LoggerOptions = {
37
- transport: { targets },
38
- mixin(data: any) {
39
- // {"level":30,"time":1726065716643,"pid":21968,"hostname":"Win-LH"}
40
- // 基础字段不能重复 删除掉
41
- delete data.level;
42
- delete data.time;
43
- delete data.pid;
44
- delete data.hostname;
45
- if (!data?.traceId) {
46
- return { traceId: getTraceId() };
47
- }
48
- return {};
49
- },
50
- };
51
-
52
- return config;
53
- }
54
-
55
- const startTime = Symbol('startTime');
56
-
57
- export function createLogger(options?: ILogger.Options) {
58
- const logger = pino({
59
- ...getPinoConfig(),
60
- });
61
-
62
- const express = () => {
63
- const { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers') as typeof import('pino-std-serializers');
64
-
65
- return (req: any, res: any, next: any) => {
66
- const response: any = res;
67
- response[startTime] = response[startTime] || Date.now();
68
- const traceId = req.headers['trace-id'] || genTraceId();
69
-
70
- const onComplete = () => {
71
- res.removeListener('close', onComplete);
72
- res.removeListener('finish', onComplete);
73
- res.removeListener('error', onComplete);
74
- const duration = Date.now() - response[startTime];
75
-
76
- logger.info({ duration, request: mapHttpRequest(req).req, response: mapHttpResponse(res).res }, 'request');
77
- };
78
-
79
- res.on('close', onComplete);
80
- res.on('finish', onComplete);
81
- res.on('error', onComplete);
82
-
83
- runInTrace({ traceId }, next);
84
- };
85
- };
86
-
87
- return { logger, express };
88
- }
1
+ import pino from 'pino';
2
+ // https://github.com/pinojs/pino/blob/master/docs/api.md
3
+
4
+ import { isDev } from './env';
5
+ import { genTraceId, getTraceId, runInTrace } from './trace';
6
+
7
+ export interface ILogger {
8
+ debug: pino.LogFn;
9
+ info: pino.LogFn;
10
+ warn: pino.LogFn;
11
+ error: pino.LogFn;
12
+ setData: (value: any) => any;
13
+ }
14
+
15
+ export namespace ILogger {
16
+ export interface Options {}
17
+ }
18
+
19
+ function getPinoConfig() {
20
+ const targets: any = [];
21
+
22
+ if (isDev()) {
23
+ targets.push({
24
+ level: 'debug',
25
+ target: 'pino-pretty', // must be installed separately,
26
+ options: {},
27
+ });
28
+ }
29
+
30
+ targets.push({
31
+ level: 'debug',
32
+ target: './rotate',
33
+ options: { path: './.logs/' },
34
+ });
35
+
36
+ const config: pino.LoggerOptions = {
37
+ transport: { targets },
38
+ mixin(data: any) {
39
+ // {"level":30,"time":1726065716643,"pid":21968,"hostname":"Win-LH"}
40
+ // 基础字段不能重复 删除掉
41
+ delete data.level;
42
+ delete data.time;
43
+ delete data.pid;
44
+ delete data.hostname;
45
+ if (!data?.traceId) {
46
+ return { traceId: getTraceId() };
47
+ }
48
+ return {};
49
+ },
50
+ };
51
+
52
+ return config;
53
+ }
54
+
55
+ const startTime = Symbol('startTime');
56
+
57
+ export function createLogger(options?: ILogger.Options) {
58
+ const logger = pino({
59
+ ...getPinoConfig(),
60
+ });
61
+
62
+ const express = () => {
63
+ const { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers') as typeof import('pino-std-serializers');
64
+
65
+ return (req: any, res: any, next: any) => {
66
+ const response: any = res;
67
+ response[startTime] = response[startTime] || Date.now();
68
+ const traceId = req.headers['trace-id'] || genTraceId();
69
+
70
+ const onComplete = () => {
71
+ res.removeListener('close', onComplete);
72
+ res.removeListener('finish', onComplete);
73
+ res.removeListener('error', onComplete);
74
+ const duration = Date.now() - response[startTime];
75
+
76
+ logger.info({ duration, request: mapHttpRequest(req).req, response: mapHttpResponse(res).res }, 'request');
77
+ };
78
+
79
+ res.on('close', onComplete);
80
+ res.on('finish', onComplete);
81
+ res.on('error', onComplete);
82
+
83
+ runInTrace({ traceId }, next);
84
+ };
85
+ };
86
+
87
+ return { logger, express };
88
+ }