@rsdk/logging 5.12.0-next.4 → 5.12.0-next.6
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/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.factory.d.ts +3 -1
- package/dist/logger.factory.js +33 -13
- package/dist/logger.factory.js.map +1 -1
- package/dist/metadata/logger-metadata.registry.d.ts +3 -3
- package/dist/types.d.ts +9 -1
- package/dist/types.js +8 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/src/decorators/log-serializer.decorator.ts +2 -2
- package/src/index.ts +2 -1
- package/src/logger.factory.ts +49 -20
- package/src/metadata/logger-metadata.registry.ts +4 -4
- package/src/types.ts +10 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { DEFAULT_LEVEL } from './defaults';
|
|
2
2
|
export { PinoLogger } from './implementations/pino-logger.class';
|
|
3
|
-
export { LogLevel, Params, LoggerOptions, LoggingContext, OnMessage,
|
|
3
|
+
export { LogLevel, Params, LoggerOptions, LoggingContext, OnMessage, LoggerSerializerMetadata, LogTimestampFormat, } from './types';
|
|
4
4
|
export { ILogger, ILogSerializer, LogSerializerBase } from './logger.interface';
|
|
5
5
|
export { stringifyContext } from './helpers';
|
|
6
6
|
export { LoggerFactory } from './logger.factory';
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LogSerializer = exports.LoggerFactory = exports.stringifyContext = exports.LogLevel = exports.PinoLogger = exports.DEFAULT_LEVEL = void 0;
|
|
3
|
+
exports.LogSerializer = exports.LoggerFactory = exports.stringifyContext = exports.LogTimestampFormat = exports.LogLevel = exports.PinoLogger = exports.DEFAULT_LEVEL = void 0;
|
|
4
4
|
var defaults_1 = require("./defaults");
|
|
5
5
|
Object.defineProperty(exports, "DEFAULT_LEVEL", { enumerable: true, get: function () { return defaults_1.DEFAULT_LEVEL; } });
|
|
6
6
|
var pino_logger_class_1 = require("./implementations/pino-logger.class");
|
|
7
7
|
Object.defineProperty(exports, "PinoLogger", { enumerable: true, get: function () { return pino_logger_class_1.PinoLogger; } });
|
|
8
8
|
var types_1 = require("./types");
|
|
9
9
|
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return types_1.LogLevel; } });
|
|
10
|
+
Object.defineProperty(exports, "LogTimestampFormat", { enumerable: true, get: function () { return types_1.LogTimestampFormat; } });
|
|
10
11
|
var helpers_1 = require("./helpers");
|
|
11
12
|
Object.defineProperty(exports, "stringifyContext", { enumerable: true, get: function () { return helpers_1.stringifyContext; } });
|
|
12
13
|
var logger_factory_1 = require("./logger.factory");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AAEtB,yEAAiE;AAAxD,+GAAA,UAAU,OAAA;AACnB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AAEtB,yEAAiE;AAAxD,+GAAA,UAAU,OAAA;AACnB,iCAQiB;AAPf,iGAAA,QAAQ,OAAA;AAMR,2GAAA,kBAAkB,OAAA;AAGpB,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AACzB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,kFAAsE;AAA7D,yHAAA,aAAa,OAAA"}
|
package/dist/logger.factory.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ import type { LoggerOptions, LoggingContext, OnMessage } from './types';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare class LoggerFactory {
|
|
8
8
|
private static readonly events;
|
|
9
|
+
private static readonly opts;
|
|
10
|
+
private static pinoTimestampFormatMap;
|
|
9
11
|
/**
|
|
10
12
|
* Under the hood every logger instance will use this
|
|
11
13
|
* static instance. Motivation for this is that it's much
|
|
@@ -17,7 +19,7 @@ export declare class LoggerFactory {
|
|
|
17
19
|
*/
|
|
18
20
|
private static _globalPino;
|
|
19
21
|
private static _serializers;
|
|
20
|
-
private static
|
|
22
|
+
private static get pinoConfig();
|
|
21
23
|
/**
|
|
22
24
|
* Переконфигурация pino нужна потому, что изначально логгер инициализируется
|
|
23
25
|
* с дефолтными настройками, т. к. конфигурация ещё не прочитана.
|
package/dist/logger.factory.js
CHANGED
|
@@ -5,6 +5,7 @@ const node_events_1 = require("node:events");
|
|
|
5
5
|
const logger_metadata_registry_1 = require("./metadata/logger-metadata.registry");
|
|
6
6
|
const defaults_1 = require("./defaults");
|
|
7
7
|
const implementations_1 = require("./implementations");
|
|
8
|
+
const types_1 = require("./types");
|
|
8
9
|
/**
|
|
9
10
|
* ATTENTION: require('pino') тут не просто так, в общем они нужны для корректной работы хуков из `@opentelemetry/instrumentation-pino`
|
|
10
11
|
*/
|
|
@@ -19,6 +20,18 @@ const requirePino = () => {
|
|
|
19
20
|
class LoggerFactory {
|
|
20
21
|
// eslint-disable-next-line unicorn/prefer-event-target
|
|
21
22
|
static events = new node_events_1.EventEmitter();
|
|
23
|
+
static opts = {
|
|
24
|
+
level: defaults_1.DEFAULT_LEVEL,
|
|
25
|
+
redact: [],
|
|
26
|
+
stream: requirePino().destination(),
|
|
27
|
+
timestampFormat: types_1.LogTimestampFormat.isoTime,
|
|
28
|
+
};
|
|
29
|
+
static pinoTimestampFormatMap = {
|
|
30
|
+
[types_1.LogTimestampFormat.epochTime]: requirePino().stdTimeFunctions.epochTime,
|
|
31
|
+
[types_1.LogTimestampFormat.unixTime]: requirePino().stdTimeFunctions.unixTime,
|
|
32
|
+
[types_1.LogTimestampFormat.nullTime]: requirePino().stdTimeFunctions.nullTime,
|
|
33
|
+
[types_1.LogTimestampFormat.isoTime]: requirePino().stdTimeFunctions.isoTime,
|
|
34
|
+
};
|
|
22
35
|
/**
|
|
23
36
|
* Under the hood every logger instance will use this
|
|
24
37
|
* static instance. Motivation for this is that it's much
|
|
@@ -31,13 +44,16 @@ class LoggerFactory {
|
|
|
31
44
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
32
45
|
static _globalPino = requirePino()({
|
|
33
46
|
level: defaults_1.DEFAULT_LEVEL,
|
|
47
|
+
timestamp: this.pinoTimestampFormatMap[this.opts.timestampFormat],
|
|
34
48
|
});
|
|
35
49
|
static _serializers = null;
|
|
36
|
-
static
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
static get pinoConfig() {
|
|
51
|
+
const { timestampFormat, ...other } = this.opts;
|
|
52
|
+
return {
|
|
53
|
+
...other,
|
|
54
|
+
timestamp: this.pinoTimestampFormatMap[timestampFormat],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
41
57
|
/**
|
|
42
58
|
* Переконфигурация pino нужна потому, что изначально логгер инициализируется
|
|
43
59
|
* с дефолтными настройками, т. к. конфигурация ещё не прочитана.
|
|
@@ -47,7 +63,7 @@ class LoggerFactory {
|
|
|
47
63
|
*/
|
|
48
64
|
static reconfigure(opts) {
|
|
49
65
|
this.applyOptions(opts);
|
|
50
|
-
const { stream, ...other } = this.
|
|
66
|
+
const { stream, ...other } = this.pinoConfig;
|
|
51
67
|
this._globalPino = requirePino()(other, stream);
|
|
52
68
|
}
|
|
53
69
|
/**
|
|
@@ -70,6 +86,7 @@ class LoggerFactory {
|
|
|
70
86
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
71
87
|
this._globalPino = requirePino()({
|
|
72
88
|
...other,
|
|
89
|
+
timestamp: this.pinoTimestampFormatMap[this.opts.timestampFormat],
|
|
73
90
|
/**
|
|
74
91
|
* Функция которая позволяет добавить дополнительные данные в логи Pino
|
|
75
92
|
*/
|
|
@@ -80,13 +97,11 @@ class LoggerFactory {
|
|
|
80
97
|
* https://getpino.io/#/docs/api?id=logmethod
|
|
81
98
|
*/
|
|
82
99
|
logMethod: function (inputArgs, method) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const arg2 = inputArgs.shift();
|
|
100
|
+
const arg1 = inputArgs[0];
|
|
101
|
+
if (arg1 && typeof arg1 === 'object') {
|
|
86
102
|
logHookFunction(arg1);
|
|
87
|
-
// eslint-disable-next-line unicorn/prefer-reflect-apply
|
|
88
|
-
return method.apply(this, [arg1, arg2, ...inputArgs]);
|
|
89
103
|
}
|
|
104
|
+
// eslint-disable-next-line unicorn/prefer-reflect-apply
|
|
90
105
|
return method.apply(this, inputArgs);
|
|
91
106
|
},
|
|
92
107
|
}
|
|
@@ -144,8 +159,13 @@ class LoggerFactory {
|
|
|
144
159
|
return this._serializers.has(name);
|
|
145
160
|
}
|
|
146
161
|
static applyOptions(opts) {
|
|
147
|
-
const { redact, level, stream
|
|
148
|
-
Object.assign(this.opts, {
|
|
162
|
+
const { redact, level, stream, timestampFormat } = opts || {};
|
|
163
|
+
Object.assign(this.opts, {
|
|
164
|
+
redact,
|
|
165
|
+
level: level ?? defaults_1.DEFAULT_LEVEL,
|
|
166
|
+
stream: stream ?? requirePino().destination(),
|
|
167
|
+
timestampFormat: timestampFormat ?? requirePino().stdTimeFunctions.isoTime,
|
|
168
|
+
});
|
|
149
169
|
}
|
|
150
170
|
}
|
|
151
171
|
exports.LoggerFactory = LoggerFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.factory.js","sourceRoot":"","sources":["../src/logger.factory.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;
|
|
1
|
+
{"version":3,"file":"logger.factory.js","sourceRoot":"","sources":["../src/logger.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Constructor } from '@rsdk/common';
|
|
2
|
-
import type {
|
|
2
|
+
import type { LoggerSerializerMetadata } from '../types';
|
|
3
3
|
export declare class LoggerMetadataRegistry {
|
|
4
4
|
private static readonly serializers;
|
|
5
|
-
static registerSerializer(target: Constructor, metadata:
|
|
6
|
-
static getSerializers():
|
|
5
|
+
static registerSerializer(target: Constructor, metadata: LoggerSerializerMetadata): void;
|
|
6
|
+
static getSerializers(): LoggerSerializerMetadata[];
|
|
7
7
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -8,14 +8,22 @@ export declare enum LogLevel {
|
|
|
8
8
|
debug = "debug",
|
|
9
9
|
trace = "trace"
|
|
10
10
|
}
|
|
11
|
+
export declare enum LogTimestampFormat {
|
|
12
|
+
epochTime = "epochTime",
|
|
13
|
+
unixTime = "unixTime",
|
|
14
|
+
nullTime = "nullTime",
|
|
15
|
+
isoTime = "isoTime"
|
|
16
|
+
}
|
|
17
|
+
export type TimeFn = () => string;
|
|
11
18
|
export type Params = Record<string, unknown>;
|
|
12
19
|
export interface LoggerOptions {
|
|
13
20
|
level: LogLevel;
|
|
14
21
|
redact: string[];
|
|
15
22
|
stream: pino.DestinationStream;
|
|
23
|
+
timestampFormat: LogTimestampFormat;
|
|
16
24
|
}
|
|
17
25
|
export type LoggingContext = string | Constructor;
|
|
18
26
|
export type OnMessage = (level: LogLevel, data: Record<string, unknown>) => void;
|
|
19
|
-
export interface
|
|
27
|
+
export interface LoggerSerializerMetadata {
|
|
20
28
|
target: Constructor;
|
|
21
29
|
}
|
package/dist/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LogLevel = void 0;
|
|
3
|
+
exports.LogTimestampFormat = exports.LogLevel = void 0;
|
|
4
4
|
var LogLevel;
|
|
5
5
|
(function (LogLevel) {
|
|
6
6
|
LogLevel["fatal"] = "fatal";
|
|
@@ -10,4 +10,11 @@ var LogLevel;
|
|
|
10
10
|
LogLevel["debug"] = "debug";
|
|
11
11
|
LogLevel["trace"] = "trace";
|
|
12
12
|
})(LogLevel || (exports.LogLevel = LogLevel = {}));
|
|
13
|
+
var LogTimestampFormat;
|
|
14
|
+
(function (LogTimestampFormat) {
|
|
15
|
+
LogTimestampFormat["epochTime"] = "epochTime";
|
|
16
|
+
LogTimestampFormat["unixTime"] = "unixTime";
|
|
17
|
+
LogTimestampFormat["nullTime"] = "nullTime";
|
|
18
|
+
LogTimestampFormat["isoTime"] = "isoTime";
|
|
19
|
+
})(LogTimestampFormat || (exports.LogTimestampFormat = LogTimestampFormat = {}));
|
|
13
20
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAGA,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAPW,QAAQ,wBAAR,QAAQ,QAOnB"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAGA,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAPW,QAAQ,wBAAR,QAAQ,QAOnB;AAED,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,6CAAuB,CAAA;IACvB,2CAAqB,CAAA;IACrB,2CAAqB,CAAA;IACrB,yCAAmB,CAAA;AACrB,CAAC,EALW,kBAAkB,kCAAlB,kBAAkB,QAK7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/logging",
|
|
3
|
-
"version": "5.12.0-next.
|
|
3
|
+
"version": "5.12.0-next.6",
|
|
4
4
|
"description": "Base framework independent logging functionality",
|
|
5
5
|
"license": "Apache License 2.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
"reflect-metadata": "^0.1.12 || ^0.2.0",
|
|
19
19
|
"rxjs": "^7.1.0"
|
|
20
20
|
},
|
|
21
|
-
"gitHead": "
|
|
21
|
+
"gitHead": "32103725bddbe5e7e99074ba40b5032dc14cf60c"
|
|
22
22
|
}
|
|
@@ -4,12 +4,12 @@ import 'reflect-metadata';
|
|
|
4
4
|
|
|
5
5
|
import { LOGGER_METADATA_KEY } from '../metadata/constants';
|
|
6
6
|
import { LoggerMetadataRegistry } from '../metadata/logger-metadata.registry';
|
|
7
|
-
import type {
|
|
7
|
+
import type { LoggerSerializerMetadata } from '../types';
|
|
8
8
|
|
|
9
9
|
const logSerializerDecorator: ClassDecorator = function (
|
|
10
10
|
target: Function,
|
|
11
11
|
): void {
|
|
12
|
-
const metadata:
|
|
12
|
+
const metadata: LoggerSerializerMetadata = {
|
|
13
13
|
target: target as Constructor,
|
|
14
14
|
};
|
|
15
15
|
|
package/src/index.ts
CHANGED
|
@@ -7,7 +7,8 @@ export {
|
|
|
7
7
|
LoggerOptions,
|
|
8
8
|
LoggingContext,
|
|
9
9
|
OnMessage,
|
|
10
|
-
|
|
10
|
+
LoggerSerializerMetadata,
|
|
11
|
+
LogTimestampFormat,
|
|
11
12
|
} from './types';
|
|
12
13
|
export { ILogger, ILogSerializer, LogSerializerBase } from './logger.interface';
|
|
13
14
|
export { stringifyContext } from './helpers';
|
package/src/logger.factory.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
2
|
import type _pino from 'pino';
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
DestinationStream,
|
|
5
|
+
Logger as Pino,
|
|
6
|
+
LoggerOptions as LoggerOptsPino,
|
|
7
|
+
} from 'pino';
|
|
4
8
|
|
|
5
9
|
import { LoggerMetadataRegistry } from './metadata/logger-metadata.registry';
|
|
6
10
|
import { DEFAULT_LEVEL } from './defaults';
|
|
@@ -8,11 +12,13 @@ import { PinoLogger } from './implementations';
|
|
|
8
12
|
import type { ILogger, LogSerializerBase } from './logger.interface';
|
|
9
13
|
import type {
|
|
10
14
|
LoggerOptions,
|
|
11
|
-
|
|
15
|
+
LoggerSerializerMetadata,
|
|
12
16
|
LoggingContext,
|
|
13
17
|
LogLevel,
|
|
14
18
|
OnMessage,
|
|
19
|
+
TimeFn,
|
|
15
20
|
} from './types';
|
|
21
|
+
import { LogTimestampFormat } from './types';
|
|
16
22
|
|
|
17
23
|
/**
|
|
18
24
|
* ATTENTION: require('pino') тут не просто так, в общем они нужны для корректной работы хуков из `@opentelemetry/instrumentation-pino`
|
|
@@ -30,6 +36,20 @@ export class LoggerFactory {
|
|
|
30
36
|
// eslint-disable-next-line unicorn/prefer-event-target
|
|
31
37
|
private static readonly events = new EventEmitter();
|
|
32
38
|
|
|
39
|
+
private static readonly opts: LoggerOptions = {
|
|
40
|
+
level: DEFAULT_LEVEL,
|
|
41
|
+
redact: [],
|
|
42
|
+
stream: requirePino().destination(),
|
|
43
|
+
timestampFormat: LogTimestampFormat.isoTime,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
private static pinoTimestampFormatMap: Record<LogTimestampFormat, TimeFn> = {
|
|
47
|
+
[LogTimestampFormat.epochTime]: requirePino().stdTimeFunctions.epochTime,
|
|
48
|
+
[LogTimestampFormat.unixTime]: requirePino().stdTimeFunctions.unixTime,
|
|
49
|
+
[LogTimestampFormat.nullTime]: requirePino().stdTimeFunctions.nullTime,
|
|
50
|
+
[LogTimestampFormat.isoTime]: requirePino().stdTimeFunctions.isoTime,
|
|
51
|
+
};
|
|
52
|
+
|
|
33
53
|
/**
|
|
34
54
|
* Under the hood every logger instance will use this
|
|
35
55
|
* static instance. Motivation for this is that it's much
|
|
@@ -42,15 +62,21 @@ export class LoggerFactory {
|
|
|
42
62
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
43
63
|
private static _globalPino: Pino = requirePino()({
|
|
44
64
|
level: DEFAULT_LEVEL,
|
|
65
|
+
timestamp: this.pinoTimestampFormatMap[this.opts.timestampFormat],
|
|
45
66
|
});
|
|
46
67
|
|
|
47
68
|
private static _serializers: Map<string, LogSerializerBase> | null = null;
|
|
48
69
|
|
|
49
|
-
private static
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
70
|
+
private static get pinoConfig(): LoggerOptsPino & {
|
|
71
|
+
stream: DestinationStream;
|
|
72
|
+
} {
|
|
73
|
+
const { timestampFormat, ...other } = this.opts;
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
...other,
|
|
77
|
+
timestamp: this.pinoTimestampFormatMap[timestampFormat],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
54
80
|
|
|
55
81
|
/**
|
|
56
82
|
* Переконфигурация pino нужна потому, что изначально логгер инициализируется
|
|
@@ -62,7 +88,7 @@ export class LoggerFactory {
|
|
|
62
88
|
static reconfigure(opts: Partial<LoggerOptions>): void {
|
|
63
89
|
this.applyOptions(opts);
|
|
64
90
|
|
|
65
|
-
const { stream, ...other } = this.
|
|
91
|
+
const { stream, ...other } = this.pinoConfig;
|
|
66
92
|
|
|
67
93
|
this._globalPino = requirePino()(other, stream);
|
|
68
94
|
}
|
|
@@ -91,6 +117,7 @@ export class LoggerFactory {
|
|
|
91
117
|
this._globalPino = requirePino()(
|
|
92
118
|
{
|
|
93
119
|
...other,
|
|
120
|
+
timestamp: this.pinoTimestampFormatMap[this.opts.timestampFormat],
|
|
94
121
|
|
|
95
122
|
/**
|
|
96
123
|
* Функция которая позволяет добавить дополнительные данные в логи Pino
|
|
@@ -105,15 +132,11 @@ export class LoggerFactory {
|
|
|
105
132
|
inputArgs: any[],
|
|
106
133
|
method: Function,
|
|
107
134
|
): unknown {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
logHookFunction(arg1);
|
|
113
|
-
|
|
114
|
-
// eslint-disable-next-line unicorn/prefer-reflect-apply
|
|
115
|
-
return method.apply(this, [arg1, arg2, ...inputArgs]);
|
|
135
|
+
const arg1 = inputArgs[0];
|
|
136
|
+
if (arg1 && typeof arg1 === 'object') {
|
|
137
|
+
logHookFunction(arg1 as T);
|
|
116
138
|
}
|
|
139
|
+
// eslint-disable-next-line unicorn/prefer-reflect-apply
|
|
117
140
|
return method.apply(this, inputArgs);
|
|
118
141
|
},
|
|
119
142
|
}
|
|
@@ -139,7 +162,7 @@ export class LoggerFactory {
|
|
|
139
162
|
static getSerializers(): LogSerializerBase[] {
|
|
140
163
|
if (this._serializers) return Array.from(this._serializers.values());
|
|
141
164
|
|
|
142
|
-
const metas:
|
|
165
|
+
const metas: LoggerSerializerMetadata[] =
|
|
143
166
|
LoggerMetadataRegistry.getSerializers();
|
|
144
167
|
|
|
145
168
|
this._serializers = new Map<string, LogSerializerBase>();
|
|
@@ -189,8 +212,14 @@ export class LoggerFactory {
|
|
|
189
212
|
}
|
|
190
213
|
|
|
191
214
|
private static applyOptions(opts: Partial<LoggerOptions>): void {
|
|
192
|
-
const { redact, level, stream
|
|
193
|
-
|
|
194
|
-
Object.assign(this.opts, {
|
|
215
|
+
const { redact, level, stream, timestampFormat } = opts || {};
|
|
216
|
+
|
|
217
|
+
Object.assign(this.opts, {
|
|
218
|
+
redact,
|
|
219
|
+
level: level ?? DEFAULT_LEVEL,
|
|
220
|
+
stream: stream ?? requirePino().destination(),
|
|
221
|
+
timestampFormat:
|
|
222
|
+
timestampFormat ?? requirePino().stdTimeFunctions.isoTime,
|
|
223
|
+
});
|
|
195
224
|
}
|
|
196
225
|
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import type { Constructor } from '@rsdk/common';
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { LoggerSerializerMetadata } from '../types';
|
|
4
4
|
|
|
5
5
|
export class LoggerMetadataRegistry {
|
|
6
6
|
private static readonly serializers = new Map<
|
|
7
7
|
Constructor,
|
|
8
|
-
|
|
8
|
+
LoggerSerializerMetadata
|
|
9
9
|
>();
|
|
10
10
|
|
|
11
11
|
static registerSerializer(
|
|
12
12
|
target: Constructor,
|
|
13
|
-
metadata:
|
|
13
|
+
metadata: LoggerSerializerMetadata,
|
|
14
14
|
): void {
|
|
15
15
|
this.serializers.set(target, metadata);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
static getSerializers():
|
|
18
|
+
static getSerializers(): LoggerSerializerMetadata[] {
|
|
19
19
|
return Array.from(this.serializers.values());
|
|
20
20
|
}
|
|
21
21
|
}
|
package/src/types.ts
CHANGED
|
@@ -10,12 +10,21 @@ export enum LogLevel {
|
|
|
10
10
|
trace = 'trace',
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
export enum LogTimestampFormat {
|
|
14
|
+
epochTime = 'epochTime',
|
|
15
|
+
unixTime = 'unixTime',
|
|
16
|
+
nullTime = 'nullTime',
|
|
17
|
+
isoTime = 'isoTime',
|
|
18
|
+
}
|
|
19
|
+
export type TimeFn = () => string;
|
|
20
|
+
|
|
13
21
|
export type Params = Record<string, unknown>;
|
|
14
22
|
|
|
15
23
|
export interface LoggerOptions {
|
|
16
24
|
level: LogLevel;
|
|
17
25
|
redact: string[];
|
|
18
26
|
stream: pino.DestinationStream;
|
|
27
|
+
timestampFormat: LogTimestampFormat;
|
|
19
28
|
}
|
|
20
29
|
|
|
21
30
|
export type LoggingContext = string | Constructor;
|
|
@@ -25,6 +34,6 @@ export type OnMessage = (
|
|
|
25
34
|
data: Record<string, unknown>,
|
|
26
35
|
) => void;
|
|
27
36
|
|
|
28
|
-
export interface
|
|
37
|
+
export interface LoggerSerializerMetadata {
|
|
29
38
|
target: Constructor;
|
|
30
39
|
}
|