@lark-apaas/nestjs-logger 1.0.1 → 1.0.2-alpha.10

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 CHANGED
@@ -14376,22 +14376,22 @@ __export(index_exports, {
14376
14376
  LoggerContextMiddleware: () => LoggerContextMiddleware,
14377
14377
  LoggerModule: () => LoggerModule,
14378
14378
  PinoLoggerService: () => PinoLoggerService,
14379
+ RequestContextService: () => import_nestjs_common5.RequestContextService,
14379
14380
  TRACE_LOGGER: () => TRACE_LOGGER
14380
14381
  });
14381
14382
  module.exports = __toCommonJS(index_exports);
14382
14383
 
14383
14384
  // src/service/app-logger.service.ts
14384
- var import_common2 = require("@nestjs/common");
14385
- var import_util = require("util");
14385
+ var import_common = require("@nestjs/common");
14386
+ var import_nestjs_observable = require("@lark-apaas/nestjs-observable");
14386
14387
 
14387
14388
  // src/helper/constants.ts
14388
14389
  var PINO_ROOT_LOGGER = Symbol("PINO_ROOT_LOGGER");
14389
14390
  var TRACE_LOGGER = Symbol("TRACE_LOGGER");
14390
14391
  var METRICS_LOGGER = Symbol("METRICS_LOGGER");
14391
14392
 
14392
- // src/service/request-context.service.ts
14393
- var import_common = require("@nestjs/common");
14394
- var import_async_hooks = require("async_hooks");
14393
+ // src/service/app-logger.service.ts
14394
+ var import_nestjs_common = require("@lark-apaas/nestjs-common");
14395
14395
  function _ts_decorate(decorators, target, key, desc) {
14396
14396
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14397
14397
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -14399,43 +14399,6 @@ function _ts_decorate(decorators, target, key, desc) {
14399
14399
  return c > 3 && r && Object.defineProperty(target, key, r), r;
14400
14400
  }
14401
14401
  __name(_ts_decorate, "_ts_decorate");
14402
- var RequestContextService = class {
14403
- static {
14404
- __name(this, "RequestContextService");
14405
- }
14406
- storage = new import_async_hooks.AsyncLocalStorage();
14407
- run(context, callback) {
14408
- const store = {
14409
- ...context
14410
- };
14411
- return this.storage.run(store, callback);
14412
- }
14413
- setContext(partial) {
14414
- const store = this.storage.getStore();
14415
- if (!store) {
14416
- return;
14417
- }
14418
- Object.assign(store, partial);
14419
- }
14420
- getContext() {
14421
- return this.storage.getStore();
14422
- }
14423
- get(key) {
14424
- return this.storage.getStore()?.[key];
14425
- }
14426
- };
14427
- RequestContextService = _ts_decorate([
14428
- (0, import_common.Injectable)()
14429
- ], RequestContextService);
14430
-
14431
- // src/service/app-logger.service.ts
14432
- function _ts_decorate2(decorators, target, key, desc) {
14433
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14434
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
14435
- 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;
14436
- return c > 3 && r && Object.defineProperty(target, key, r), r;
14437
- }
14438
- __name(_ts_decorate2, "_ts_decorate");
14439
14402
  function _ts_metadata(k, v) {
14440
14403
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
14441
14404
  }
@@ -14544,6 +14507,7 @@ var BasePinoLogger = class _BasePinoLogger {
14544
14507
  logger;
14545
14508
  contextStore;
14546
14509
  levelState = new LogLevelState();
14510
+ observableService = new import_nestjs_observable.ObservableService();
14547
14511
  constructor(logger, contextStore) {
14548
14512
  this.logger = logger;
14549
14513
  this.contextStore = contextStore;
@@ -14610,6 +14574,26 @@ var BasePinoLogger = class _BasePinoLogger {
14610
14574
  const { context, stack, extras } = this.extractOptionalParams(optionalParams, treatStack);
14611
14575
  const requestState = this.contextStore.getContext();
14612
14576
  const traceId = requestState?.requestId ?? null;
14577
+ const flatObject = /* @__PURE__ */ __name((extra) => {
14578
+ let res = {};
14579
+ try {
14580
+ extra.forEach((item) => {
14581
+ if (typeof item === "object" && item !== null) {
14582
+ res = {
14583
+ ...res,
14584
+ ...item
14585
+ };
14586
+ }
14587
+ });
14588
+ delete res.message;
14589
+ delete res.level;
14590
+ delete res.time;
14591
+ delete res.context;
14592
+ return res;
14593
+ } catch {
14594
+ }
14595
+ }, "flatObject");
14596
+ const processedExtra = flatObject(extras);
14613
14597
  const payload = {
14614
14598
  trace_id: traceId,
14615
14599
  path: requestState?.path,
@@ -14617,12 +14601,13 @@ var BasePinoLogger = class _BasePinoLogger {
14617
14601
  user_id: requestState?.userId ?? null,
14618
14602
  app_id: requestState?.appId ?? null,
14619
14603
  tenant_id: requestState?.tenantId ?? null,
14620
- pid: process.pid
14604
+ pid: process.pid,
14605
+ ...processedExtra
14621
14606
  };
14622
14607
  if (context) {
14623
14608
  payload.context = context;
14624
14609
  }
14625
- const { messageText, stack: computedStack, data } = this.buildMessagePayload(message, extras);
14610
+ const { messageText, stack: computedStack, data } = this.buildMessagePayload(message);
14626
14611
  if (stack) {
14627
14612
  payload.stack = stack;
14628
14613
  } else if (computedStack) {
@@ -14633,10 +14618,14 @@ var BasePinoLogger = class _BasePinoLogger {
14633
14618
  }
14634
14619
  const pinoLevel = mapLogLevelToPino(level);
14635
14620
  const sanitizedPayload = sanitizeValue(payload);
14636
- if (messageText) {
14637
- this.logger[pinoLevel](sanitizedPayload, messageText);
14621
+ if (process.env.NODE_ENV === "development") {
14622
+ if (messageText) {
14623
+ this.logger[pinoLevel](sanitizedPayload, messageText);
14624
+ } else {
14625
+ this.logger[pinoLevel](sanitizedPayload);
14626
+ }
14638
14627
  } else {
14639
- this.logger[pinoLevel](sanitizedPayload);
14628
+ this.observableService.log(level, messageText ?? "", payload);
14640
14629
  }
14641
14630
  }
14642
14631
  extractOptionalParams(optionalParams, treatStack) {
@@ -14665,7 +14654,7 @@ var BasePinoLogger = class _BasePinoLogger {
14665
14654
  extras: params
14666
14655
  };
14667
14656
  }
14668
- buildMessagePayload(message, extras) {
14657
+ buildMessagePayload(message) {
14669
14658
  if (message instanceof Error) {
14670
14659
  return {
14671
14660
  messageText: message.message,
@@ -14673,17 +14662,8 @@ var BasePinoLogger = class _BasePinoLogger {
14673
14662
  };
14674
14663
  }
14675
14664
  if (typeof message === "string") {
14676
- if (extras.length === 0) {
14677
- return {
14678
- messageText: message
14679
- };
14680
- }
14681
- const allMessages = [
14682
- message,
14683
- ...extras.map((e) => stringifyParam(e))
14684
- ].join(" ");
14685
14665
  return {
14686
- messageText: allMessages
14666
+ messageText: message
14687
14667
  };
14688
14668
  }
14689
14669
  if (typeof message === "object" && message !== null) {
@@ -14708,16 +14688,16 @@ var AppLogger = class extends BasePinoLogger {
14708
14688
  }
14709
14689
  constructor(logger, requestContext) {
14710
14690
  super(logger, requestContext);
14711
- import_common2.Logger.overrideLogger(this);
14691
+ import_common.Logger.overrideLogger(this);
14712
14692
  }
14713
14693
  };
14714
- AppLogger = _ts_decorate2([
14715
- (0, import_common2.Injectable)(),
14716
- _ts_param(0, (0, import_common2.Inject)(PINO_ROOT_LOGGER)),
14694
+ AppLogger = _ts_decorate([
14695
+ (0, import_common.Injectable)(),
14696
+ _ts_param(0, (0, import_common.Inject)(PINO_ROOT_LOGGER)),
14717
14697
  _ts_metadata("design:type", Function),
14718
14698
  _ts_metadata("design:paramtypes", [
14719
14699
  typeof PinoLogger === "undefined" ? Object : PinoLogger,
14720
- typeof RequestContextService === "undefined" ? Object : RequestContextService
14700
+ typeof import_nestjs_common.RequestContextService === "undefined" ? Object : import_nestjs_common.RequestContextService
14721
14701
  ])
14722
14702
  ], AppLogger);
14723
14703
  var PinoLoggerService = class extends BasePinoLogger {
@@ -14743,18 +14723,6 @@ function mapLogLevelToPino(level) {
14743
14723
  }
14744
14724
  }
14745
14725
  __name(mapLogLevelToPino, "mapLogLevelToPino");
14746
- function stringifyParam(param) {
14747
- if (typeof param === "string") {
14748
- return param;
14749
- }
14750
- const inspectOptions = {
14751
- depth: 4,
14752
- colors: false,
14753
- compact: true
14754
- };
14755
- return (0, import_util.inspect)(param, inspectOptions);
14756
- }
14757
- __name(stringifyParam, "stringifyParam");
14758
14726
  function sanitizeValue(value) {
14759
14727
  if (value === null || value === void 0) {
14760
14728
  return value;
@@ -14777,9 +14745,10 @@ function sanitizeValue(value) {
14777
14745
  __name(sanitizeValue, "sanitizeValue");
14778
14746
 
14779
14747
  // src/module.ts
14780
- var import_common5 = require("@nestjs/common");
14748
+ var import_common4 = require("@nestjs/common");
14781
14749
  var import_core = require("@nestjs/core");
14782
14750
  var import_config3 = __toESM(require_config2(), 1);
14751
+ var import_nestjs_common4 = require("@lark-apaas/nestjs-common");
14783
14752
 
14784
14753
  // src/config/logger.config.ts
14785
14754
  var import_config = __toESM(require_config2(), 1);
@@ -14813,16 +14782,18 @@ var logger_config_default = (0, import_config.registerAs)("logger", () => {
14813
14782
  });
14814
14783
 
14815
14784
  // src/interceptor/logging.interceptor.ts
14816
- var import_common3 = require("@nestjs/common");
14785
+ var import_common2 = require("@nestjs/common");
14817
14786
  var import_config2 = __toESM(require_config2(), 1);
14818
14787
  var import_operators = __toESM(require_operators(), 1);
14819
- function _ts_decorate3(decorators, target, key, desc) {
14788
+ var import_util = require("util");
14789
+ var import_nestjs_common2 = require("@lark-apaas/nestjs-common");
14790
+ function _ts_decorate2(decorators, target, key, desc) {
14820
14791
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14821
14792
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
14822
14793
  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;
14823
14794
  return c > 3 && r && Object.defineProperty(target, key, r), r;
14824
14795
  }
14825
- __name(_ts_decorate3, "_ts_decorate");
14796
+ __name(_ts_decorate2, "_ts_decorate");
14826
14797
  function _ts_metadata2(k, v) {
14827
14798
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
14828
14799
  }
@@ -14946,6 +14917,7 @@ duration_ms=${durationMs}`, "HTTPTraceInterceptor");
14946
14917
  this.traceLogger.logStructured(traceLevel, isError ? "HTTP request failed" : "HTTP request completed", responseMeta, "HTTPTraceInterceptor");
14947
14918
  });
14948
14919
  return next.handle().pipe((0, import_operators.catchError)((error) => {
14920
+ this.appLogger.error((0, import_util.format)("HTTP request exception\nmethod=%s url=%s\nerror=%o", req.method, req.url, error), "HTTPTraceInterceptor");
14949
14921
  throw error;
14950
14922
  }));
14951
14923
  }
@@ -14970,20 +14942,21 @@ duration_ms=${durationMs}`, "HTTPTraceInterceptor");
14970
14942
  return {
14971
14943
  _error: "Failed to serialize data",
14972
14944
  _type: typeof data,
14945
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14973
14946
  _constructor: data?.constructor?.name
14974
14947
  };
14975
14948
  }
14976
14949
  }
14977
14950
  };
14978
- LoggingInterceptor = _ts_decorate3([
14979
- (0, import_common3.Injectable)(),
14980
- _ts_param2(0, (0, import_common3.Inject)(TRACE_LOGGER)),
14981
- _ts_param2(2, (0, import_common3.Inject)(AppLogger)),
14982
- _ts_param2(3, (0, import_common3.Inject)(logger_config_default.KEY)),
14951
+ LoggingInterceptor = _ts_decorate2([
14952
+ (0, import_common2.Injectable)(),
14953
+ _ts_param2(0, (0, import_common2.Inject)(TRACE_LOGGER)),
14954
+ _ts_param2(2, (0, import_common2.Inject)(AppLogger)),
14955
+ _ts_param2(3, (0, import_common2.Inject)(logger_config_default.KEY)),
14983
14956
  _ts_metadata2("design:type", Function),
14984
14957
  _ts_metadata2("design:paramtypes", [
14985
14958
  typeof PinoLoggerService === "undefined" ? Object : PinoLoggerService,
14986
- typeof RequestContextService === "undefined" ? Object : RequestContextService,
14959
+ typeof import_nestjs_common2.RequestContextService === "undefined" ? Object : import_nestjs_common2.RequestContextService,
14987
14960
  typeof AppLogger === "undefined" ? Object : AppLogger,
14988
14961
  typeof import_config2.ConfigType === "undefined" ? Object : import_config2.ConfigType
14989
14962
  ])
@@ -15040,15 +15013,16 @@ function createFileDestination(pathname) {
15040
15013
  __name(createFileDestination, "createFileDestination");
15041
15014
 
15042
15015
  // src/middleware/logger-context.middleware.ts
15043
- var import_common4 = require("@nestjs/common");
15016
+ var import_common3 = require("@nestjs/common");
15044
15017
  var import_crypto = require("crypto");
15045
- function _ts_decorate4(decorators, target, key, desc) {
15018
+ var import_nestjs_common3 = require("@lark-apaas/nestjs-common");
15019
+ function _ts_decorate3(decorators, target, key, desc) {
15046
15020
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
15047
15021
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15048
15022
  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;
15049
15023
  return c > 3 && r && Object.defineProperty(target, key, r), r;
15050
15024
  }
15051
- __name(_ts_decorate4, "_ts_decorate");
15025
+ __name(_ts_decorate3, "_ts_decorate");
15052
15026
  function _ts_metadata3(k, v) {
15053
15027
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15054
15028
  }
@@ -15061,13 +15035,14 @@ var LoggerContextMiddleware = class {
15061
15035
  constructor(requestContext) {
15062
15036
  this.requestContext = requestContext;
15063
15037
  }
15064
- use(req, _res, next) {
15038
+ use(req, res, next) {
15065
15039
  const requestId = req.headers["x-tt-log-id"] ?? (0, import_crypto.randomUUID)();
15066
15040
  const path = req.originalUrl ?? req.url;
15067
15041
  const userContext = req.userContext ?? {};
15068
15042
  const mutableReq = req;
15069
15043
  mutableReq.requestId = requestId;
15070
15044
  mutableReq.id = requestId;
15045
+ res.setHeader("x-log-trace-id", requestId);
15071
15046
  this.requestContext.run({
15072
15047
  requestId,
15073
15048
  path,
@@ -15078,35 +15053,35 @@ var LoggerContextMiddleware = class {
15078
15053
  }, () => next());
15079
15054
  }
15080
15055
  };
15081
- LoggerContextMiddleware = _ts_decorate4([
15082
- (0, import_common4.Injectable)(),
15056
+ LoggerContextMiddleware = _ts_decorate3([
15057
+ (0, import_common3.Injectable)(),
15083
15058
  _ts_metadata3("design:type", Function),
15084
15059
  _ts_metadata3("design:paramtypes", [
15085
- typeof RequestContextService === "undefined" ? Object : RequestContextService
15060
+ typeof import_nestjs_common3.RequestContextService === "undefined" ? Object : import_nestjs_common3.RequestContextService
15086
15061
  ])
15087
15062
  ], LoggerContextMiddleware);
15088
15063
 
15089
15064
  // src/module.ts
15090
- function _ts_decorate5(decorators, target, key, desc) {
15065
+ function _ts_decorate4(decorators, target, key, desc) {
15091
15066
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
15092
15067
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15093
15068
  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;
15094
15069
  return c > 3 && r && Object.defineProperty(target, key, r), r;
15095
15070
  }
15096
- __name(_ts_decorate5, "_ts_decorate");
15071
+ __name(_ts_decorate4, "_ts_decorate");
15097
15072
  var LoggerModule = class {
15098
15073
  static {
15099
15074
  __name(this, "LoggerModule");
15100
15075
  }
15101
15076
  };
15102
- LoggerModule = _ts_decorate5([
15103
- (0, import_common5.Global)(),
15104
- (0, import_common5.Module)({
15077
+ LoggerModule = _ts_decorate4([
15078
+ (0, import_common4.Global)(),
15079
+ (0, import_common4.Module)({
15105
15080
  imports: [
15106
- import_config3.ConfigModule.forFeature(logger_config_default)
15081
+ import_config3.ConfigModule.forFeature(logger_config_default),
15082
+ import_nestjs_common4.CommonModule
15107
15083
  ],
15108
15084
  providers: [
15109
- RequestContextService,
15110
15085
  LoggerContextMiddleware,
15111
15086
  {
15112
15087
  provide: PINO_ROOT_LOGGER,
@@ -15127,7 +15102,7 @@ LoggerModule = _ts_decorate5([
15127
15102
  filePath: `${config.logDir}/trace.log`
15128
15103
  }), requestContext), "useFactory"),
15129
15104
  inject: [
15130
- RequestContextService,
15105
+ import_nestjs_common4.RequestContextService,
15131
15106
  logger_config_default.KEY
15132
15107
  ]
15133
15108
  },
@@ -15141,17 +15116,20 @@ LoggerModule = _ts_decorate5([
15141
15116
  exports: [
15142
15117
  AppLogger,
15143
15118
  TRACE_LOGGER,
15144
- RequestContextService,
15145
15119
  LoggerContextMiddleware
15146
15120
  ]
15147
15121
  })
15148
15122
  ], LoggerModule);
15123
+
15124
+ // src/index.ts
15125
+ var import_nestjs_common5 = require("@lark-apaas/nestjs-common");
15149
15126
  // Annotate the CommonJS export names for ESM import in node:
15150
15127
  0 && (module.exports = {
15151
15128
  AppLogger,
15152
15129
  LoggerContextMiddleware,
15153
15130
  LoggerModule,
15154
15131
  PinoLoggerService,
15132
+ RequestContextService,
15155
15133
  TRACE_LOGGER
15156
15134
  });
15157
15135
  //# sourceMappingURL=index.cjs.map