@rsdk/logging 5.12.0-next.4 → 5.12.0-next.5
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 +30 -8
- 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 +45 -12
- 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
|
*/
|
|
@@ -144,8 +161,13 @@ class LoggerFactory {
|
|
|
144
161
|
return this._serializers.has(name);
|
|
145
162
|
}
|
|
146
163
|
static applyOptions(opts) {
|
|
147
|
-
const { redact, level, stream
|
|
148
|
-
Object.assign(this.opts, {
|
|
164
|
+
const { redact, level, stream, timestampFormat } = opts || {};
|
|
165
|
+
Object.assign(this.opts, {
|
|
166
|
+
redact,
|
|
167
|
+
level: level ?? defaults_1.DEFAULT_LEVEL,
|
|
168
|
+
stream: stream ?? requirePino().destination(),
|
|
169
|
+
timestampFormat: timestampFormat ?? requirePino().stdTimeFunctions.isoTime,
|
|
170
|
+
});
|
|
149
171
|
}
|
|
150
172
|
}
|
|
151
173
|
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.5",
|
|
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": "6a5a92adcb81f72e74db723613b0a930ef52a821"
|
|
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
|
|
@@ -139,7 +166,7 @@ export class LoggerFactory {
|
|
|
139
166
|
static getSerializers(): LogSerializerBase[] {
|
|
140
167
|
if (this._serializers) return Array.from(this._serializers.values());
|
|
141
168
|
|
|
142
|
-
const metas:
|
|
169
|
+
const metas: LoggerSerializerMetadata[] =
|
|
143
170
|
LoggerMetadataRegistry.getSerializers();
|
|
144
171
|
|
|
145
172
|
this._serializers = new Map<string, LogSerializerBase>();
|
|
@@ -189,8 +216,14 @@ export class LoggerFactory {
|
|
|
189
216
|
}
|
|
190
217
|
|
|
191
218
|
private static applyOptions(opts: Partial<LoggerOptions>): void {
|
|
192
|
-
const { redact, level, stream
|
|
193
|
-
|
|
194
|
-
Object.assign(this.opts, {
|
|
219
|
+
const { redact, level, stream, timestampFormat } = opts || {};
|
|
220
|
+
|
|
221
|
+
Object.assign(this.opts, {
|
|
222
|
+
redact,
|
|
223
|
+
level: level ?? DEFAULT_LEVEL,
|
|
224
|
+
stream: stream ?? requirePino().destination(),
|
|
225
|
+
timestampFormat:
|
|
226
|
+
timestampFormat ?? requirePino().stdTimeFunctions.isoTime,
|
|
227
|
+
});
|
|
195
228
|
}
|
|
196
229
|
}
|
|
@@ -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
|
}
|