@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.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, _res: Response, next: NextFunction): void;
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, _res: Response, next: NextFunction): void;
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 as Injectable2, Logger } from "@nestjs/common";
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/request-context.service.ts
14382
- import { Injectable } from "@nestjs/common";
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 = _ts_decorate2([
14704
- Injectable2(),
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 Injectable3 } from "@nestjs/common";
14808
- function _ts_decorate3(decorators, target, key, desc) {
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(_ts_decorate3, "_ts_decorate");
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 = _ts_decorate3([
14968
- Injectable3(),
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 RequestContextService === "undefined" ? Object : RequestContextService,
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 Injectable4 } from "@nestjs/common";
15003
+ import { Injectable as Injectable3 } from "@nestjs/common";
15033
15004
  import { randomUUID } from "crypto";
15034
- function _ts_decorate4(decorators, target, key, desc) {
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(_ts_decorate4, "_ts_decorate");
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, _res, next) {
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 = _ts_decorate4([
15071
- Injectable4(),
15043
+ LoggerContextMiddleware = _ts_decorate3([
15044
+ Injectable3(),
15072
15045
  _ts_metadata3("design:type", Function),
15073
15046
  _ts_metadata3("design:paramtypes", [
15074
- typeof RequestContextService === "undefined" ? Object : RequestContextService
15047
+ typeof RequestContextService3 === "undefined" ? Object : RequestContextService3
15075
15048
  ])
15076
15049
  ], LoggerContextMiddleware);
15077
15050
 
15078
15051
  // src/module.ts
15079
- function _ts_decorate5(decorators, target, key, desc) {
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(_ts_decorate5, "_ts_decorate");
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 = _ts_decorate5([
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
- RequestContextService,
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
- RequestContextService,
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
- RequestContextService,
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