@lark-apaas/nestjs-logger 1.0.0 → 1.0.1-alpha.1

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.js CHANGED
@@ -10567,7 +10567,7 @@ var require_tap = __commonJS({
10567
10567
  var lift_1 = require_lift();
10568
10568
  var OperatorSubscriber_1 = require_OperatorSubscriber();
10569
10569
  var identity_1 = require_identity();
10570
- function tap2(observerOrNext, error, complete) {
10570
+ function tap(observerOrNext, error, complete) {
10571
10571
  var tapObserver = isFunction_1.isFunction(observerOrNext) || error || complete ? {
10572
10572
  next: observerOrNext,
10573
10573
  error,
@@ -10600,8 +10600,8 @@ var require_tap = __commonJS({
10600
10600
  }));
10601
10601
  }) : identity_1.identity;
10602
10602
  }
10603
- __name(tap2, "tap");
10604
- exports.tap = tap2;
10603
+ __name(tap, "tap");
10604
+ exports.tap = tap;
10605
10605
  }
10606
10606
  });
10607
10607
 
@@ -14844,6 +14844,16 @@ var LoggingInterceptor = class {
14844
14844
  ip: req.ip ?? null,
14845
14845
  pid: process.pid
14846
14846
  };
14847
+ const originalJson = res.json.bind(res);
14848
+ const originalSend = res.send.bind(res);
14849
+ res.json = function(body) {
14850
+ res.__finalResponseBody = body;
14851
+ return originalJson(body);
14852
+ };
14853
+ res.send = function(body) {
14854
+ res.__finalResponseBody = body;
14855
+ return originalSend(body);
14856
+ };
14847
14857
  const requestMeta = {
14848
14858
  ...baseMeta
14849
14859
  };
@@ -14855,47 +14865,45 @@ var LoggingInterceptor = class {
14855
14865
  }
14856
14866
  this.appLogger.log("HTTP request started \n url=%s \n request_query=%o \n request_body=%o", req.url, requestMeta["query_params"] ?? {}, requestMeta["request_body"] ?? {});
14857
14867
  this.traceLogger.logStructured("verbose", "HTTP request started", requestMeta, "HTTPTraceInterceptor");
14858
- return next.handle().pipe((0, import_operators.tap)((responseData) => {
14868
+ let logged = false;
14869
+ res.on("finish", () => {
14870
+ if (logged) {
14871
+ return;
14872
+ }
14873
+ logged = true;
14859
14874
  const durationMs = Date.now() - startedAt;
14860
14875
  const statusCode = res.statusCode;
14861
- const appLog = this.appLogger[res.statusCode >= 400 ? "error" : "log"].bind(this.appLogger);
14862
14876
  const responseMeta = {
14863
14877
  ...baseMeta,
14864
14878
  status_code: statusCode,
14865
14879
  duration_ms: durationMs
14866
14880
  };
14867
- if (this.config.logResponseBody && responseData !== void 0) {
14868
- responseMeta["response_body"] = this.sanitizeAndTruncate(responseData);
14869
- }
14870
- const traceLevel = res.statusCode >= 400 ? "error" : "verbose";
14871
- appLog("HTTP request completed\n url=%s \n status_code=%d \n duration_ms=%d \n response_body=%o", req.url, statusCode, durationMs, responseMeta.response_body ?? {});
14872
- this.traceLogger.logStructured(traceLevel, "HTTP request completed", responseMeta, "HTTPTraceInterceptor");
14873
- }), (0, import_operators.catchError)((error) => {
14874
- const durationMs = Date.now() - startedAt;
14875
- const statusCode = res.statusCode >= 400 ? res.statusCode : 500;
14876
- const linkMeta = {
14877
- ...baseMeta,
14878
- status_code: statusCode,
14879
- duration_ms: durationMs
14880
- };
14881
- if (error instanceof Error) {
14882
- linkMeta["error_message"] = error.message;
14883
- }
14884
- const meta = {
14885
- ...baseMeta,
14886
- status_code: statusCode,
14887
- duration_ms: durationMs
14888
- };
14889
- if (error instanceof Error) {
14890
- meta["error"] = {
14891
- message: error.message,
14892
- stack: error.stack
14893
- };
14881
+ const finalResponseBody = res.__finalResponseBody;
14882
+ const contentType = res.getHeader("content-type");
14883
+ const isJsonResponse = typeof contentType === "string" && contentType.includes("application/json");
14884
+ if (this.config.logResponseBody && finalResponseBody !== void 0 && isJsonResponse) {
14885
+ responseMeta["response_body"] = this.sanitizeAndTruncate(finalResponseBody);
14886
+ }
14887
+ const isError = statusCode >= 400;
14888
+ const appLog = this.appLogger[isError ? "error" : "log"].bind(this.appLogger);
14889
+ const traceLevel = isError ? "error" : "verbose";
14890
+ const shouldLogBody = this.config.logResponseBody && isJsonResponse && finalResponseBody !== void 0;
14891
+ if (isError) {
14892
+ if (shouldLogBody) {
14893
+ appLog("HTTP request failed\n url=%s \n status_code=%d \n duration_ms=%d \n response_body=%o", req.url, statusCode, durationMs, finalResponseBody);
14894
+ } else {
14895
+ appLog("HTTP request failed\n url=%s \n status_code=%d \n duration_ms=%d", req.url, statusCode, durationMs);
14896
+ }
14894
14897
  } else {
14895
- meta["error"] = String(error);
14898
+ if (shouldLogBody) {
14899
+ appLog("HTTP request completed\n url=%s \n status_code=%d \n duration_ms=%d \n response_body=%o", req.url, statusCode, durationMs, finalResponseBody);
14900
+ } else {
14901
+ appLog("HTTP request completed\n url=%s \n status_code=%d \n duration_ms=%d", req.url, statusCode, durationMs);
14902
+ }
14896
14903
  }
14897
- this.appLogger.error("HTTP request failed\n url=%s \n status_code=%d \n duration_ms=%d \n error=%o", req.url, statusCode, durationMs, meta.error);
14898
- this.traceLogger.logStructured("error", "HTTP request failed", meta, "HTTPTraceInterceptor");
14904
+ this.traceLogger.logStructured(traceLevel, isError ? "HTTP request failed" : "HTTP request completed", responseMeta, "HTTPTraceInterceptor");
14905
+ });
14906
+ return next.handle().pipe((0, import_operators.catchError)((error) => {
14899
14907
  throw error;
14900
14908
  }));
14901
14909
  }