@lark-apaas/nestjs-logger 1.0.1 → 1.0.2-alpha.2
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.cjs +49 -71
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -19
- package/dist/index.d.ts +4 -19
- package/dist/index.js +39 -62
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,29 +1,14 @@
|
|
|
1
1
|
import { LoggerService, LogLevel, NestMiddleware } from '@nestjs/common';
|
|
2
2
|
import { Logger } from 'pino';
|
|
3
|
+
import { RequestContextService } from '@lark-apaas/nestjs-common';
|
|
4
|
+
export { RequestContextService } from '@lark-apaas/nestjs-common';
|
|
3
5
|
import { Request, Response, NextFunction } from 'express';
|
|
4
6
|
|
|
5
|
-
interface RequestContextState {
|
|
6
|
-
requestId: string;
|
|
7
|
-
path?: string;
|
|
8
|
-
method?: string;
|
|
9
|
-
userId?: string;
|
|
10
|
-
appId?: string;
|
|
11
|
-
tenantId?: string;
|
|
12
|
-
ip?: string;
|
|
13
|
-
[key: string]: unknown;
|
|
14
|
-
}
|
|
15
|
-
declare class RequestContextService {
|
|
16
|
-
private readonly storage;
|
|
17
|
-
run<T>(context: RequestContextState, callback: () => T): T;
|
|
18
|
-
setContext(partial: Partial<RequestContextState>): void;
|
|
19
|
-
getContext(): RequestContextState | undefined;
|
|
20
|
-
get<K extends keyof RequestContextState>(key: K): RequestContextState[K] | undefined;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
7
|
declare abstract class BasePinoLogger implements LoggerService {
|
|
24
8
|
protected readonly logger: Logger;
|
|
25
9
|
protected readonly contextStore: RequestContextService;
|
|
26
10
|
private readonly levelState;
|
|
11
|
+
private readonly otelLogger;
|
|
27
12
|
constructor(logger: Logger, contextStore: RequestContextService);
|
|
28
13
|
setLogLevels(levels: LogLevel[]): void;
|
|
29
14
|
log(message: unknown, ...optionalParams: unknown[]): void;
|
|
@@ -64,7 +49,7 @@ type RequestWithUserContext = Request & {
|
|
|
64
49
|
declare class LoggerContextMiddleware implements NestMiddleware {
|
|
65
50
|
private readonly requestContext;
|
|
66
51
|
constructor(requestContext: RequestContextService);
|
|
67
|
-
use(req: RequestWithUserContext,
|
|
52
|
+
use(req: RequestWithUserContext, res: Response, next: NextFunction): void;
|
|
68
53
|
}
|
|
69
54
|
|
|
70
55
|
declare const TRACE_LOGGER: unique symbol;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,29 +1,14 @@
|
|
|
1
1
|
import { LoggerService, LogLevel, NestMiddleware } from '@nestjs/common';
|
|
2
2
|
import { Logger } from 'pino';
|
|
3
|
+
import { RequestContextService } from '@lark-apaas/nestjs-common';
|
|
4
|
+
export { RequestContextService } from '@lark-apaas/nestjs-common';
|
|
3
5
|
import { Request, Response, NextFunction } from 'express';
|
|
4
6
|
|
|
5
|
-
interface RequestContextState {
|
|
6
|
-
requestId: string;
|
|
7
|
-
path?: string;
|
|
8
|
-
method?: string;
|
|
9
|
-
userId?: string;
|
|
10
|
-
appId?: string;
|
|
11
|
-
tenantId?: string;
|
|
12
|
-
ip?: string;
|
|
13
|
-
[key: string]: unknown;
|
|
14
|
-
}
|
|
15
|
-
declare class RequestContextService {
|
|
16
|
-
private readonly storage;
|
|
17
|
-
run<T>(context: RequestContextState, callback: () => T): T;
|
|
18
|
-
setContext(partial: Partial<RequestContextState>): void;
|
|
19
|
-
getContext(): RequestContextState | undefined;
|
|
20
|
-
get<K extends keyof RequestContextState>(key: K): RequestContextState[K] | undefined;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
7
|
declare abstract class BasePinoLogger implements LoggerService {
|
|
24
8
|
protected readonly logger: Logger;
|
|
25
9
|
protected readonly contextStore: RequestContextService;
|
|
26
10
|
private readonly levelState;
|
|
11
|
+
private readonly otelLogger;
|
|
27
12
|
constructor(logger: Logger, contextStore: RequestContextService);
|
|
28
13
|
setLogLevels(levels: LogLevel[]): void;
|
|
29
14
|
log(message: unknown, ...optionalParams: unknown[]): void;
|
|
@@ -64,7 +49,7 @@ type RequestWithUserContext = Request & {
|
|
|
64
49
|
declare class LoggerContextMiddleware implements NestMiddleware {
|
|
65
50
|
private readonly requestContext;
|
|
66
51
|
constructor(requestContext: RequestContextService);
|
|
67
|
-
use(req: RequestWithUserContext,
|
|
52
|
+
use(req: RequestWithUserContext, res: Response, next: NextFunction): void;
|
|
68
53
|
}
|
|
69
54
|
|
|
70
55
|
declare const TRACE_LOGGER: unique symbol;
|
package/dist/index.js
CHANGED
|
@@ -14370,17 +14370,17 @@ var require_operators = __commonJS({
|
|
|
14370
14370
|
});
|
|
14371
14371
|
|
|
14372
14372
|
// src/service/app-logger.service.ts
|
|
14373
|
-
import { Inject, Injectable
|
|
14373
|
+
import { Inject, Injectable, Logger } from "@nestjs/common";
|
|
14374
14374
|
import { inspect } from "util";
|
|
14375
|
+
import { appSdk } from "@lark-apaas/observable";
|
|
14375
14376
|
|
|
14376
14377
|
// src/helper/constants.ts
|
|
14377
14378
|
var PINO_ROOT_LOGGER = Symbol("PINO_ROOT_LOGGER");
|
|
14378
14379
|
var TRACE_LOGGER = Symbol("TRACE_LOGGER");
|
|
14379
14380
|
var METRICS_LOGGER = Symbol("METRICS_LOGGER");
|
|
14380
14381
|
|
|
14381
|
-
// src/service/
|
|
14382
|
-
import {
|
|
14383
|
-
import { AsyncLocalStorage } from "async_hooks";
|
|
14382
|
+
// src/service/app-logger.service.ts
|
|
14383
|
+
import { RequestContextService } from "@lark-apaas/nestjs-common";
|
|
14384
14384
|
function _ts_decorate(decorators, target, key, desc) {
|
|
14385
14385
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14386
14386
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -14388,43 +14388,6 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
14388
14388
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
14389
14389
|
}
|
|
14390
14390
|
__name(_ts_decorate, "_ts_decorate");
|
|
14391
|
-
var RequestContextService = class {
|
|
14392
|
-
static {
|
|
14393
|
-
__name(this, "RequestContextService");
|
|
14394
|
-
}
|
|
14395
|
-
storage = new AsyncLocalStorage();
|
|
14396
|
-
run(context, callback) {
|
|
14397
|
-
const store = {
|
|
14398
|
-
...context
|
|
14399
|
-
};
|
|
14400
|
-
return this.storage.run(store, callback);
|
|
14401
|
-
}
|
|
14402
|
-
setContext(partial) {
|
|
14403
|
-
const store = this.storage.getStore();
|
|
14404
|
-
if (!store) {
|
|
14405
|
-
return;
|
|
14406
|
-
}
|
|
14407
|
-
Object.assign(store, partial);
|
|
14408
|
-
}
|
|
14409
|
-
getContext() {
|
|
14410
|
-
return this.storage.getStore();
|
|
14411
|
-
}
|
|
14412
|
-
get(key) {
|
|
14413
|
-
return this.storage.getStore()?.[key];
|
|
14414
|
-
}
|
|
14415
|
-
};
|
|
14416
|
-
RequestContextService = _ts_decorate([
|
|
14417
|
-
Injectable()
|
|
14418
|
-
], RequestContextService);
|
|
14419
|
-
|
|
14420
|
-
// src/service/app-logger.service.ts
|
|
14421
|
-
function _ts_decorate2(decorators, target, key, desc) {
|
|
14422
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14423
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
14424
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
14425
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
14426
|
-
}
|
|
14427
|
-
__name(_ts_decorate2, "_ts_decorate");
|
|
14428
14391
|
function _ts_metadata(k, v) {
|
|
14429
14392
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
14430
14393
|
}
|
|
@@ -14533,11 +14496,13 @@ var BasePinoLogger = class _BasePinoLogger {
|
|
|
14533
14496
|
logger;
|
|
14534
14497
|
contextStore;
|
|
14535
14498
|
levelState = new LogLevelState();
|
|
14499
|
+
otelLogger = appSdk;
|
|
14536
14500
|
constructor(logger, contextStore) {
|
|
14537
14501
|
this.logger = logger;
|
|
14538
14502
|
this.contextStore = contextStore;
|
|
14539
14503
|
const pinoLevel = this.logger.level;
|
|
14540
14504
|
const nestLevels = LogLevelState.fromPinoLevel(pinoLevel);
|
|
14505
|
+
this.otelLogger.start();
|
|
14541
14506
|
this.levelState.set(nestLevels);
|
|
14542
14507
|
}
|
|
14543
14508
|
setLogLevels(levels) {
|
|
@@ -14627,6 +14592,7 @@ var BasePinoLogger = class _BasePinoLogger {
|
|
|
14627
14592
|
} else {
|
|
14628
14593
|
this.logger[pinoLevel](sanitizedPayload);
|
|
14629
14594
|
}
|
|
14595
|
+
this.otelLogger.log(level, messageText ?? "", sanitizedPayload);
|
|
14630
14596
|
}
|
|
14631
14597
|
extractOptionalParams(optionalParams, treatStack) {
|
|
14632
14598
|
const params = [
|
|
@@ -14700,8 +14666,8 @@ var AppLogger = class extends BasePinoLogger {
|
|
|
14700
14666
|
Logger.overrideLogger(this);
|
|
14701
14667
|
}
|
|
14702
14668
|
};
|
|
14703
|
-
AppLogger =
|
|
14704
|
-
|
|
14669
|
+
AppLogger = _ts_decorate([
|
|
14670
|
+
Injectable(),
|
|
14705
14671
|
_ts_param(0, Inject(PINO_ROOT_LOGGER)),
|
|
14706
14672
|
_ts_metadata("design:type", Function),
|
|
14707
14673
|
_ts_metadata("design:paramtypes", [
|
|
@@ -14769,6 +14735,7 @@ __name(sanitizeValue, "sanitizeValue");
|
|
|
14769
14735
|
var import_config3 = __toESM(require_config2(), 1);
|
|
14770
14736
|
import { Global, Module } from "@nestjs/common";
|
|
14771
14737
|
import { APP_INTERCEPTOR } from "@nestjs/core";
|
|
14738
|
+
import { RequestContextService as RequestContextService4 } from "@lark-apaas/nestjs-common";
|
|
14772
14739
|
|
|
14773
14740
|
// src/config/logger.config.ts
|
|
14774
14741
|
var import_config = __toESM(require_config2(), 1);
|
|
@@ -14804,14 +14771,16 @@ var logger_config_default = (0, import_config.registerAs)("logger", () => {
|
|
|
14804
14771
|
// src/interceptor/logging.interceptor.ts
|
|
14805
14772
|
var import_config2 = __toESM(require_config2(), 1);
|
|
14806
14773
|
var import_operators = __toESM(require_operators(), 1);
|
|
14807
|
-
import { Inject as Inject2, Injectable as
|
|
14808
|
-
|
|
14774
|
+
import { Inject as Inject2, Injectable as Injectable2 } from "@nestjs/common";
|
|
14775
|
+
import { format } from "util";
|
|
14776
|
+
import { RequestContextService as RequestContextService2 } from "@lark-apaas/nestjs-common";
|
|
14777
|
+
function _ts_decorate2(decorators, target, key, desc) {
|
|
14809
14778
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14810
14779
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
14811
14780
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
14812
14781
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
14813
14782
|
}
|
|
14814
|
-
__name(
|
|
14783
|
+
__name(_ts_decorate2, "_ts_decorate");
|
|
14815
14784
|
function _ts_metadata2(k, v) {
|
|
14816
14785
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
14817
14786
|
}
|
|
@@ -14935,6 +14904,7 @@ duration_ms=${durationMs}`, "HTTPTraceInterceptor");
|
|
|
14935
14904
|
this.traceLogger.logStructured(traceLevel, isError ? "HTTP request failed" : "HTTP request completed", responseMeta, "HTTPTraceInterceptor");
|
|
14936
14905
|
});
|
|
14937
14906
|
return next.handle().pipe((0, import_operators.catchError)((error) => {
|
|
14907
|
+
this.appLogger.error(format("HTTP request exception\nmethod=%s url=%s\nerror=%o", req.method, req.url, error), "HTTPTraceInterceptor");
|
|
14938
14908
|
throw error;
|
|
14939
14909
|
}));
|
|
14940
14910
|
}
|
|
@@ -14959,20 +14929,21 @@ duration_ms=${durationMs}`, "HTTPTraceInterceptor");
|
|
|
14959
14929
|
return {
|
|
14960
14930
|
_error: "Failed to serialize data",
|
|
14961
14931
|
_type: typeof data,
|
|
14932
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14962
14933
|
_constructor: data?.constructor?.name
|
|
14963
14934
|
};
|
|
14964
14935
|
}
|
|
14965
14936
|
}
|
|
14966
14937
|
};
|
|
14967
|
-
LoggingInterceptor =
|
|
14968
|
-
|
|
14938
|
+
LoggingInterceptor = _ts_decorate2([
|
|
14939
|
+
Injectable2(),
|
|
14969
14940
|
_ts_param2(0, Inject2(TRACE_LOGGER)),
|
|
14970
14941
|
_ts_param2(2, Inject2(AppLogger)),
|
|
14971
14942
|
_ts_param2(3, Inject2(logger_config_default.KEY)),
|
|
14972
14943
|
_ts_metadata2("design:type", Function),
|
|
14973
14944
|
_ts_metadata2("design:paramtypes", [
|
|
14974
14945
|
typeof PinoLoggerService === "undefined" ? Object : PinoLoggerService,
|
|
14975
|
-
typeof
|
|
14946
|
+
typeof RequestContextService2 === "undefined" ? Object : RequestContextService2,
|
|
14976
14947
|
typeof AppLogger === "undefined" ? Object : AppLogger,
|
|
14977
14948
|
typeof import_config2.ConfigType === "undefined" ? Object : import_config2.ConfigType
|
|
14978
14949
|
])
|
|
@@ -15029,15 +15000,16 @@ function createFileDestination(pathname) {
|
|
|
15029
15000
|
__name(createFileDestination, "createFileDestination");
|
|
15030
15001
|
|
|
15031
15002
|
// src/middleware/logger-context.middleware.ts
|
|
15032
|
-
import { Injectable as
|
|
15003
|
+
import { Injectable as Injectable3 } from "@nestjs/common";
|
|
15033
15004
|
import { randomUUID } from "crypto";
|
|
15034
|
-
|
|
15005
|
+
import { RequestContextService as RequestContextService3 } from "@lark-apaas/nestjs-common";
|
|
15006
|
+
function _ts_decorate3(decorators, target, key, desc) {
|
|
15035
15007
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
15036
15008
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15037
15009
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
15038
15010
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
15039
15011
|
}
|
|
15040
|
-
__name(
|
|
15012
|
+
__name(_ts_decorate3, "_ts_decorate");
|
|
15041
15013
|
function _ts_metadata3(k, v) {
|
|
15042
15014
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
15043
15015
|
}
|
|
@@ -15050,13 +15022,14 @@ var LoggerContextMiddleware = class {
|
|
|
15050
15022
|
constructor(requestContext) {
|
|
15051
15023
|
this.requestContext = requestContext;
|
|
15052
15024
|
}
|
|
15053
|
-
use(req,
|
|
15025
|
+
use(req, res, next) {
|
|
15054
15026
|
const requestId = req.headers["x-tt-log-id"] ?? randomUUID();
|
|
15055
15027
|
const path = req.originalUrl ?? req.url;
|
|
15056
15028
|
const userContext = req.userContext ?? {};
|
|
15057
15029
|
const mutableReq = req;
|
|
15058
15030
|
mutableReq.requestId = requestId;
|
|
15059
15031
|
mutableReq.id = requestId;
|
|
15032
|
+
res.setHeader("x-log-trace-id", requestId);
|
|
15060
15033
|
this.requestContext.run({
|
|
15061
15034
|
requestId,
|
|
15062
15035
|
path,
|
|
@@ -15067,35 +15040,35 @@ var LoggerContextMiddleware = class {
|
|
|
15067
15040
|
}, () => next());
|
|
15068
15041
|
}
|
|
15069
15042
|
};
|
|
15070
|
-
LoggerContextMiddleware =
|
|
15071
|
-
|
|
15043
|
+
LoggerContextMiddleware = _ts_decorate3([
|
|
15044
|
+
Injectable3(),
|
|
15072
15045
|
_ts_metadata3("design:type", Function),
|
|
15073
15046
|
_ts_metadata3("design:paramtypes", [
|
|
15074
|
-
typeof
|
|
15047
|
+
typeof RequestContextService3 === "undefined" ? Object : RequestContextService3
|
|
15075
15048
|
])
|
|
15076
15049
|
], LoggerContextMiddleware);
|
|
15077
15050
|
|
|
15078
15051
|
// src/module.ts
|
|
15079
|
-
function
|
|
15052
|
+
function _ts_decorate4(decorators, target, key, desc) {
|
|
15080
15053
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
15081
15054
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15082
15055
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
15083
15056
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
15084
15057
|
}
|
|
15085
|
-
__name(
|
|
15058
|
+
__name(_ts_decorate4, "_ts_decorate");
|
|
15086
15059
|
var LoggerModule = class {
|
|
15087
15060
|
static {
|
|
15088
15061
|
__name(this, "LoggerModule");
|
|
15089
15062
|
}
|
|
15090
15063
|
};
|
|
15091
|
-
LoggerModule =
|
|
15064
|
+
LoggerModule = _ts_decorate4([
|
|
15092
15065
|
Global(),
|
|
15093
15066
|
Module({
|
|
15094
15067
|
imports: [
|
|
15095
15068
|
import_config3.ConfigModule.forFeature(logger_config_default)
|
|
15096
15069
|
],
|
|
15097
15070
|
providers: [
|
|
15098
|
-
|
|
15071
|
+
RequestContextService4,
|
|
15099
15072
|
LoggerContextMiddleware,
|
|
15100
15073
|
{
|
|
15101
15074
|
provide: PINO_ROOT_LOGGER,
|
|
@@ -15116,7 +15089,7 @@ LoggerModule = _ts_decorate5([
|
|
|
15116
15089
|
filePath: `${config.logDir}/trace.log`
|
|
15117
15090
|
}), requestContext), "useFactory"),
|
|
15118
15091
|
inject: [
|
|
15119
|
-
|
|
15092
|
+
RequestContextService4,
|
|
15120
15093
|
logger_config_default.KEY
|
|
15121
15094
|
]
|
|
15122
15095
|
},
|
|
@@ -15130,16 +15103,20 @@ LoggerModule = _ts_decorate5([
|
|
|
15130
15103
|
exports: [
|
|
15131
15104
|
AppLogger,
|
|
15132
15105
|
TRACE_LOGGER,
|
|
15133
|
-
|
|
15106
|
+
RequestContextService4,
|
|
15134
15107
|
LoggerContextMiddleware
|
|
15135
15108
|
]
|
|
15136
15109
|
})
|
|
15137
15110
|
], LoggerModule);
|
|
15111
|
+
|
|
15112
|
+
// src/index.ts
|
|
15113
|
+
import { RequestContextService as RequestContextService5 } from "@lark-apaas/nestjs-common";
|
|
15138
15114
|
export {
|
|
15139
15115
|
AppLogger,
|
|
15140
15116
|
LoggerContextMiddleware,
|
|
15141
15117
|
LoggerModule,
|
|
15142
15118
|
PinoLoggerService,
|
|
15119
|
+
RequestContextService5 as RequestContextService,
|
|
15143
15120
|
TRACE_LOGGER
|
|
15144
15121
|
};
|
|
15145
15122
|
//# sourceMappingURL=index.js.map
|