@eqxjs/nest-logger 3.1.0-beta.9 → 3.1.1-beta.0

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.
Files changed (122) hide show
  1. package/CHANGELOG +57 -1
  2. package/MIGRATION.md +234 -0
  3. package/PERFORMANCE_IMPROVEMENTS.md +158 -0
  4. package/README.md +2008 -16
  5. package/RESTRUCTURING_SUMMARY.md +272 -0
  6. package/STRUCTURE.md +110 -0
  7. package/dist/constants/action-message.constant.d.ts +187 -0
  8. package/dist/constants/action-message.constant.js +220 -0
  9. package/dist/constants/action-message.constant.js.map +1 -0
  10. package/dist/constants/index.d.ts +2 -0
  11. package/dist/constants/index.js +9 -0
  12. package/dist/constants/index.js.map +1 -0
  13. package/dist/constants/logger.constants.d.ts +17 -0
  14. package/dist/constants/logger.constants.js +20 -0
  15. package/dist/constants/logger.constants.js.map +1 -0
  16. package/dist/core/formatters/index.d.ts +1 -0
  17. package/dist/core/formatters/index.js +6 -0
  18. package/dist/core/formatters/index.js.map +1 -0
  19. package/dist/core/formatters/logger.formatter.d.ts +141 -0
  20. package/dist/core/formatters/logger.formatter.js +268 -0
  21. package/dist/core/formatters/logger.formatter.js.map +1 -0
  22. package/dist/core/loggers/app.logger.d.ts +46 -0
  23. package/dist/core/loggers/app.logger.js +92 -0
  24. package/dist/core/loggers/app.logger.js.map +1 -0
  25. package/dist/core/loggers/base-app.logger.d.ts +299 -0
  26. package/dist/core/loggers/base-app.logger.js +517 -0
  27. package/dist/core/loggers/base-app.logger.js.map +1 -0
  28. package/dist/core/loggers/custom.logger.d.ts +127 -0
  29. package/dist/core/loggers/custom.logger.js +260 -0
  30. package/dist/core/loggers/custom.logger.js.map +1 -0
  31. package/dist/core/loggers/index.d.ts +3 -0
  32. package/dist/core/loggers/index.js +10 -0
  33. package/dist/core/loggers/index.js.map +1 -0
  34. package/dist/helpers/datetime.helper.d.ts +24 -0
  35. package/dist/helpers/datetime.helper.js +36 -0
  36. package/dist/helpers/datetime.helper.js.map +1 -0
  37. package/dist/helpers/index.d.ts +5 -0
  38. package/dist/helpers/index.js +17 -0
  39. package/dist/helpers/index.js.map +1 -0
  40. package/dist/helpers/log.helper.d.ts +84 -0
  41. package/dist/helpers/log.helper.js +109 -0
  42. package/dist/helpers/log.helper.js.map +1 -0
  43. package/dist/helpers/logger-builder.helper.d.ts +242 -0
  44. package/dist/helpers/logger-builder.helper.js +345 -0
  45. package/dist/helpers/logger-builder.helper.js.map +1 -0
  46. package/dist/helpers/message-formatter.helper.d.ts +88 -0
  47. package/dist/helpers/message-formatter.helper.js +159 -0
  48. package/dist/helpers/message-formatter.helper.js.map +1 -0
  49. package/dist/helpers/time-performance.helper.d.ts +68 -0
  50. package/dist/helpers/time-performance.helper.js +82 -0
  51. package/dist/helpers/time-performance.helper.js.map +1 -0
  52. package/dist/index.d.ts +13 -5
  53. package/dist/index.js +24 -9
  54. package/dist/index.js.map +1 -1
  55. package/dist/interfaces/data-header.interface.d.ts +21 -0
  56. package/dist/{dto/m2.dto.js → interfaces/data-header.interface.js} +1 -1
  57. package/dist/interfaces/data-header.interface.js.map +1 -0
  58. package/dist/interfaces/data-protocol.interface.d.ts +14 -0
  59. package/dist/interfaces/data-protocol.interface.js +3 -0
  60. package/dist/interfaces/data-protocol.interface.js.map +1 -0
  61. package/dist/interfaces/data-service.interface.d.ts +21 -0
  62. package/dist/{dto/m3.dto.js → interfaces/data-service.interface.js} +1 -1
  63. package/dist/interfaces/data-service.interface.js.map +1 -0
  64. package/dist/{types.d.ts → interfaces/data.interface.d.ts} +4 -4
  65. package/dist/{dto/m1.dto.js → interfaces/data.interface.js} +1 -1
  66. package/dist/interfaces/data.interface.js.map +1 -0
  67. package/dist/interfaces/index.d.ts +5 -0
  68. package/dist/{types.js → interfaces/index.js} +1 -1
  69. package/dist/interfaces/index.js.map +1 -0
  70. package/dist/{dto/header.dto.js → interfaces/logger-opt.interface.js} +1 -1
  71. package/dist/interfaces/logger-opt.interface.js.map +1 -0
  72. package/dist/logger.module.js +4 -4
  73. package/dist/logger.module.js.map +1 -1
  74. package/dist/models/index.d.ts +1 -0
  75. package/dist/models/index.js +6 -0
  76. package/dist/models/index.js.map +1 -0
  77. package/dist/models/logger.dto.d.ts +71 -0
  78. package/dist/models/logger.dto.js +76 -0
  79. package/dist/models/logger.dto.js.map +1 -0
  80. package/package.json +30 -33
  81. package/dist/dto/header.dto.d.ts +0 -21
  82. package/dist/dto/header.dto.js.map +0 -1
  83. package/dist/dto/logger.dto.d.ts +0 -28
  84. package/dist/dto/logger.dto.js +0 -33
  85. package/dist/dto/logger.dto.js.map +0 -1
  86. package/dist/dto/m1.dto.d.ts +0 -7
  87. package/dist/dto/m1.dto.js.map +0 -1
  88. package/dist/dto/m2.dto.d.ts +0 -5
  89. package/dist/dto/m2.dto.js.map +0 -1
  90. package/dist/dto/m3.dto.d.ts +0 -5
  91. package/dist/dto/m3.dto.js.map +0 -1
  92. package/dist/dto/protocol.dto.d.ts +0 -14
  93. package/dist/dto/protocol.dto.js +0 -3
  94. package/dist/dto/protocol.dto.js.map +0 -1
  95. package/dist/dto/service.dto.d.ts +0 -25
  96. package/dist/dto/service.dto.js +0 -3
  97. package/dist/dto/service.dto.js.map +0 -1
  98. package/dist/logger.app.d.ts +0 -62
  99. package/dist/logger.app.js +0 -504
  100. package/dist/logger.app.js.map +0 -1
  101. package/dist/logger.service.d.ts +0 -15
  102. package/dist/logger.service.js +0 -158
  103. package/dist/logger.service.js.map +0 -1
  104. package/dist/logger.util.d.ts +0 -3
  105. package/dist/logger.util.js +0 -28
  106. package/dist/logger.util.js.map +0 -1
  107. package/dist/types.js.map +0 -1
  108. package/dist/utils/action.common.d.ts +0 -14
  109. package/dist/utils/action.common.js +0 -43
  110. package/dist/utils/action.common.js.map +0 -1
  111. package/dist/utils/datetime.util.d.ts +0 -1
  112. package/dist/utils/datetime.util.js +0 -13
  113. package/dist/utils/datetime.util.js.map +0 -1
  114. package/dist/utils/logger.opt.js +0 -3
  115. package/dist/utils/logger.opt.js.map +0 -1
  116. package/dist/utils/m1.utils.d.ts +0 -3
  117. package/dist/utils/m1.utils.js +0 -79
  118. package/dist/utils/m1.utils.js.map +0 -1
  119. package/dist/utils/time.performance.d.ts +0 -6
  120. package/dist/utils/time.performance.js +0 -18
  121. package/dist/utils/time.performance.js.map +0 -1
  122. /package/dist/{utils/logger.opt.d.ts → interfaces/logger-opt.interface.d.ts} +0 -0
@@ -0,0 +1,517 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
45
+ return function (target, key) { decorator(target, key, paramIndex); }
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.BaseAppLogger = void 0;
49
+ const api_1 = require("@opentelemetry/api");
50
+ const api_logs_1 = require("@opentelemetry/api-logs");
51
+ const common_1 = require("@nestjs/common");
52
+ const custom_logger_1 = require("./custom.logger");
53
+ const logger_dto_1 = require("../../models/logger.dto");
54
+ const logger_constants_1 = require("../../constants/logger.constants");
55
+ const message_formatter_helper_1 = require("../../helpers/message-formatter.helper");
56
+ const logUtil = __importStar(require("../../helpers/log.helper"));
57
+ /**
58
+ * BaseAppLogger extends CustomLogger to provide application-level logging with OpenTelemetry integration.
59
+ * Supports structured logging with telemetry metrics, distributed tracing, and standardized log formats.
60
+ */
61
+ let BaseAppLogger = class BaseAppLogger extends custom_logger_1.CustomLogger {
62
+ appName;
63
+ context;
64
+ ignoreAppResultCodeOnTelemetry = process.env.TELEMETRY_IGNORE_CODE?.split(',') || [];
65
+ allMetric;
66
+ histrogramMetric;
67
+ tracer;
68
+ otelLogger;
69
+ cachedAppVersion;
70
+ constructor(appName = logger_constants_1.DEFAULT_VALUES.DEFAULT_APP_NAME, context) {
71
+ super(appName);
72
+ this.appName = appName;
73
+ this.context = context;
74
+ // Cache expensive operations
75
+ this.cachedAppVersion = process.env.APP_VERSION || '';
76
+ this.allMetric = api_1.metrics
77
+ .getMeter(this.appName)
78
+ .createCounter('total_request');
79
+ this.histrogramMetric = api_1.metrics
80
+ .getMeter(this.appName)
81
+ .createHistogram('latency', {
82
+ description: 'Application processing time',
83
+ unit: 'ms',
84
+ valueType: api_1.ValueType.DOUBLE,
85
+ });
86
+ this.tracer = api_1.trace.getTracer(this.appName, this.cachedAppVersion);
87
+ this.otelLogger = api_logs_1.logs.getLogger(this.appName, this.cachedAppVersion);
88
+ }
89
+ /**
90
+ * Converts undefined or empty metric attributes to the default 'none' value.
91
+ * Used to ensure telemetry attributes always have a valid string value.
92
+ *
93
+ * @param metricAttr - The metric attribute value to normalize
94
+ * @returns The normalized metric attribute or 'none' if undefined/empty
95
+ */
96
+ setMetricAttrToNone(metricAttr) {
97
+ return (0, message_formatter_helper_1.setValueOrDefault)(metricAttr);
98
+ }
99
+ /**
100
+ * Initializes and constructs a LoggerDto object with all necessary fields for structured logging.
101
+ * Uses the builder pattern to create a fully populated log entry.
102
+ *
103
+ * @param level - The log level (debug, info, warn, error, verbose)
104
+ * @param message - The log message (any type, will be formatted)
105
+ * @param action - The action being logged (default: 'none')
106
+ * @param originateServiceName - The originating service name (default: 'none')
107
+ * @param recordName - The record identifier (default: 'none')
108
+ * @param sessionId - The session identifier (default: 'none')
109
+ * @param transactionId - The transaction identifier (default: 'none')
110
+ * @param channel - The channel through which the request came (default: 'none')
111
+ * @param componentVersion - The version of the component (default: 'none')
112
+ * @param useCase - The use case being executed (default: 'none')
113
+ * @param useCaseStep - The specific step within the use case (default: 'none')
114
+ * @param user - The user identifier (default: 'none')
115
+ * @param device - The device identifier(s) (default: 'none')
116
+ * @param public_ - Public identifier (default: 'none')
117
+ * @param opt - Optional logging options for customization
118
+ * @returns A fully constructed LoggerDto object
119
+ */
120
+ initializeAppLogger(level, message, action = logger_constants_1.DEFAULT_VALUES.NONE, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
121
+ const formattedMessage = (0, message_formatter_helper_1.formatMessage)(message);
122
+ const truncatedMessage = (0, message_formatter_helper_1.truncateMessage)(formattedMessage);
123
+ // Direct object creation for better performance (avoids builder overhead)
124
+ let dto = new logger_dto_1.LoggerDto();
125
+ dto.level = level;
126
+ dto.timestamp = this.dateFormat(new Date());
127
+ dto.componentName = this.context || logger_constants_1.DEFAULT_VALUES.NONE;
128
+ dto.action = action || logger_constants_1.DEFAULT_VALUES.NONE;
129
+ dto.message = truncatedMessage;
130
+ dto.appName = this.appName;
131
+ dto.instance = this.cachedHostname;
132
+ dto.originateServiceName = logger_constants_1.DEFAULT_VALUES.EVENT_SOURCE;
133
+ dto.recordName = recordName || logger_constants_1.DEFAULT_VALUES.NONE;
134
+ dto.recordType = logger_constants_1.DEFAULT_VALUES.RECORD_TYPE_DETAIL;
135
+ dto.sessionId = sessionId || logger_constants_1.DEFAULT_VALUES.NONE;
136
+ dto.transactionId = transactionId || logger_constants_1.DEFAULT_VALUES.NONE;
137
+ dto.channel = channel || logger_constants_1.DEFAULT_VALUES.NONE;
138
+ dto.componentVersion = componentVersion || logger_constants_1.DEFAULT_VALUES.NONE;
139
+ dto.useCase = useCase || logger_constants_1.DEFAULT_VALUES.NONE;
140
+ dto.useCaseStep = useCaseStep || logger_constants_1.DEFAULT_VALUES.NONE;
141
+ dto.user = user || logger_constants_1.DEFAULT_VALUES.NONE;
142
+ dto.device = device || logger_constants_1.DEFAULT_VALUES.NONE;
143
+ dto.public = public_ || logger_constants_1.DEFAULT_VALUES.NONE;
144
+ // Apply optional parameters if provided
145
+ if (opt) {
146
+ dto = { ...dto, ...opt };
147
+ }
148
+ return dto;
149
+ }
150
+ /**
151
+ * Internal method to write a log entry at the specified level.
152
+ * Initializes the logger detail and flushes it to the output.
153
+ *
154
+ * @param level - The log level
155
+ * @param message - The log message
156
+ * @param action - The action being logged (default: 'none')
157
+ * @param originateServiceName - The originating service name (default: 'none')
158
+ * @param recordName - The record identifier (default: 'none')
159
+ * @param sessionId - The session identifier (default: 'none')
160
+ * @param transactionId - The transaction identifier (default: 'none')
161
+ * @param channel - The channel identifier (default: 'none')
162
+ * @param componentVersion - The component version (default: 'none')
163
+ * @param useCase - The use case (default: 'none')
164
+ * @param useCaseStep - The use case step (default: 'none')
165
+ * @param user - The user identifier (default: 'none')
166
+ * @param device - The device identifier(s) (default: 'none')
167
+ * @param public_ - Public identifier (default: 'none')
168
+ * @param opt - Optional logging options
169
+ */
170
+ writeLog(level, message, action = logger_constants_1.DEFAULT_VALUES.NONE, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
171
+ const loggerDetail = this.initializeAppLogger(level, message, action, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
172
+ this.flushLog(loggerDetail);
173
+ }
174
+ /**
175
+ * Logs a debug-level message. Debug logs are typically used for detailed diagnostic information.
176
+ * Only writes the log if the debug level is enabled in the configuration.
177
+ *
178
+ * @param message - The debug message to log
179
+ * @param action - The action being logged (default: 'none')
180
+ * @param originateServiceName - The originating service name (default: 'none')
181
+ * @param recordName - The record identifier (default: 'none')
182
+ * @param sessionId - The session identifier (default: 'none')
183
+ * @param transactionId - The transaction identifier (default: 'none')
184
+ * @param channel - The channel identifier (default: 'none')
185
+ * @param componentVersion - The component version (default: 'none')
186
+ * @param useCase - The use case (default: 'none')
187
+ * @param useCaseStep - The use case step (default: 'none')
188
+ * @param user - The user identifier (default: 'none')
189
+ * @param device - The device identifier(s) (default: 'none')
190
+ * @param public_ - Public identifier (default: 'none')
191
+ * @param opt - Optional logging options
192
+ */
193
+ debug(message, action = logger_constants_1.DEFAULT_VALUES.NONE, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
194
+ if (!logUtil.isLevelEnable(logger_constants_1.LOG_LEVELS.DEBUG))
195
+ return;
196
+ this.writeLog(logger_constants_1.LOG_LEVELS.DEBUG, message, action, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
197
+ }
198
+ /**
199
+ * Logs an info-level message. This is an alias for the info() method.
200
+ * Used for general informational messages about application execution.
201
+ *
202
+ * @param message - The informational message to log
203
+ * @param action - The action being logged (default: 'none')
204
+ * @param originateServiceName - The originating service name (default: 'none')
205
+ * @param recordName - The record identifier (default: 'none')
206
+ * @param sessionId - The session identifier (default: 'none')
207
+ * @param transactionId - The transaction identifier (default: 'none')
208
+ * @param channel - The channel identifier (default: 'none')
209
+ * @param componentVersion - The component version (default: 'none')
210
+ * @param useCase - The use case (default: 'none')
211
+ * @param useCaseStep - The use case step (default: 'none')
212
+ * @param user - The user identifier (default: 'none')
213
+ * @param device - The device identifier(s) (default: 'none')
214
+ * @param public_ - Public identifier (default: 'none')
215
+ * @param opt - Optional logging options
216
+ */
217
+ log(message, action = logger_constants_1.DEFAULT_VALUES.NONE, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
218
+ if (!logUtil.isLevelEnable(logger_constants_1.LOG_LEVELS.INFO))
219
+ return;
220
+ this.writeLog(logger_constants_1.LOG_LEVELS.INFO, message, action, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
221
+ }
222
+ /**
223
+ * Logs an info-level message. Info logs provide general information about application execution.
224
+ * Only writes the log if the info level is enabled in the configuration.
225
+ *
226
+ * @param message - The informational message to log
227
+ * @param action - The action being logged (default: 'none')
228
+ * @param originateServiceName - The originating service name (default: 'none')
229
+ * @param recordName - The record identifier (default: 'none')
230
+ * @param sessionId - The session identifier (default: 'none')
231
+ * @param transactionId - The transaction identifier (default: 'none')
232
+ * @param channel - The channel identifier (default: 'none')
233
+ * @param componentVersion - The component version (default: 'none')
234
+ * @param useCase - The use case (default: 'none')
235
+ * @param useCaseStep - The use case step (default: 'none')
236
+ * @param user - The user identifier (default: 'none')
237
+ * @param device - The device identifier(s) (default: 'none')
238
+ * @param public_ - Public identifier (default: 'none')
239
+ * @param opt - Optional logging options
240
+ */
241
+ info(message, action = logger_constants_1.DEFAULT_VALUES.NONE, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
242
+ if (!logUtil.isLevelEnable(logger_constants_1.LOG_LEVELS.INFO))
243
+ return;
244
+ this.writeLog(logger_constants_1.LOG_LEVELS.INFO, message, action, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
245
+ }
246
+ /**
247
+ * Logs a warning-level message. Warning logs indicate potential issues or unusual conditions.
248
+ * Only writes the log if the warn level is enabled in the configuration.
249
+ *
250
+ * @param message - The warning message to log
251
+ * @param action - The action being logged (default: 'none')
252
+ * @param originateServiceName - The originating service name (default: 'none')
253
+ * @param recordName - The record identifier (default: 'none')
254
+ * @param sessionId - The session identifier (default: 'none')
255
+ * @param transactionId - The transaction identifier (default: 'none')
256
+ * @param channel - The channel identifier (default: 'none')
257
+ * @param componentVersion - The component version (default: 'none')
258
+ * @param useCase - The use case (default: 'none')
259
+ * @param useCaseStep - The use case step (default: 'none')
260
+ * @param user - The user identifier (default: 'none')
261
+ * @param device - The device identifier(s) (default: 'none')
262
+ * @param public_ - Public identifier (default: 'none')
263
+ * @param opt - Optional logging options
264
+ */
265
+ warn(message, action = logger_constants_1.DEFAULT_VALUES.NONE, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
266
+ if (!logUtil.isLevelEnable(logger_constants_1.LOG_LEVELS.WARN))
267
+ return;
268
+ this.writeLog(logger_constants_1.LOG_LEVELS.WARN, message, action, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
269
+ }
270
+ /**
271
+ * Logs an error-level message. Error logs indicate failures or critical issues.
272
+ * Only writes the log if the error level is enabled in the configuration.
273
+ *
274
+ * @param message - The error message to log
275
+ * @param action - The action being logged (default: 'none')
276
+ * @param originateServiceName - The originating service name (default: 'none')
277
+ * @param recordName - The record identifier (default: 'none')
278
+ * @param sessionId - The session identifier (default: 'none')
279
+ * @param transactionId - The transaction identifier (default: 'none')
280
+ * @param channel - The channel identifier (default: 'none')
281
+ * @param componentVersion - The component version (default: 'none')
282
+ * @param useCase - The use case (default: 'none')
283
+ * @param useCaseStep - The use case step (default: 'none')
284
+ * @param user - The user identifier (default: 'none')
285
+ * @param device - The device identifier(s) (default: 'none')
286
+ * @param public_ - Public identifier (default: 'none')
287
+ * @param opt - Optional logging options
288
+ */
289
+ error(message, action = logger_constants_1.DEFAULT_VALUES.NONE, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
290
+ if (!logUtil.isLevelEnable(logger_constants_1.LOG_LEVELS.ERROR))
291
+ return;
292
+ this.writeLog(logger_constants_1.LOG_LEVELS.ERROR, message, action, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
293
+ }
294
+ /**
295
+ * Logs a verbose-level message. Verbose logs provide the most detailed information.
296
+ * Only writes the log if the verbose level is enabled in the configuration.
297
+ *
298
+ * @param message - The verbose message to log
299
+ * @param action - The action being logged (default: 'none')
300
+ * @param originateServiceName - The originating service name (default: 'none')
301
+ * @param recordName - The record identifier (default: 'none')
302
+ * @param sessionId - The session identifier (default: 'none')
303
+ * @param transactionId - The transaction identifier (default: 'none')
304
+ * @param channel - The channel identifier (default: 'none')
305
+ * @param componentVersion - The component version (default: 'none')
306
+ * @param useCase - The use case (default: 'none')
307
+ * @param useCaseStep - The use case step (default: 'none')
308
+ * @param user - The user identifier (default: 'none')
309
+ * @param device - The device identifier(s) (default: 'none')
310
+ * @param public_ - Public identifier (default: 'none')
311
+ * @param opt - Optional logging options
312
+ */
313
+ verbose(message, action = logger_constants_1.DEFAULT_VALUES.NONE, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
314
+ if (!logUtil.isLevelEnable(logger_constants_1.LOG_LEVELS.VERBOSE))
315
+ return;
316
+ this.writeLog(logger_constants_1.LOG_LEVELS.VERBOSE, message, action, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
317
+ }
318
+ /**
319
+ * Logs a successful operation summary with telemetry metrics.
320
+ * Creates a summary-type log entry and records OpenTelemetry metrics (counter, histogram, span).
321
+ *
322
+ * @param appResult - The result description of the operation (default: 'none')
323
+ * @param appResultCode - The result code of the operation (default: 'none')
324
+ * @param serviceTime - The service processing time in milliseconds (default: 0)
325
+ * @param originateServiceName - The originating service name (default: 'none')
326
+ * @param recordName - The record identifier (default: 'none')
327
+ * @param sessionId - The session identifier (default: 'none')
328
+ * @param transactionId - The transaction identifier (default: 'none')
329
+ * @param channel - The channel identifier (default: 'none')
330
+ * @param componentVersion - The component version (default: 'none')
331
+ * @param useCase - The use case (default: 'none')
332
+ * @param useCaseStep - The use case step (default: 'none')
333
+ * @param user - The user identifier (default: 'none')
334
+ * @param device - The device identifier(s) (default: 'none')
335
+ * @param public_ - Public identifier (default: 'none')
336
+ * @param opt - Optional logging options
337
+ * @returns The created LoggerDto object
338
+ */
339
+ summarySuccess(appResult = logger_constants_1.DEFAULT_VALUES.NONE, appResultCode = logger_constants_1.DEFAULT_VALUES.NONE, serviceTime = 0, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, opt) {
340
+ const loggerDetail = this.createSummaryLog(logger_constants_1.LOG_LEVELS.INFO, appResult, appResultCode, serviceTime, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
341
+ this.flushLog(loggerDetail);
342
+ this.pushLogToOpenTelemetry(loggerDetail, api_logs_1.SeverityNumber.INFO);
343
+ this.recordTelemetry(appResultCode, appResult, recordName, useCase, serviceTime, originateServiceName, true);
344
+ return loggerDetail;
345
+ }
346
+ /**
347
+ * Logs a failed operation summary with telemetry metrics and optional stack trace.
348
+ * Creates a summary-type error log entry and records OpenTelemetry metrics (counter, histogram, span).
349
+ *
350
+ * @param appResult - The result description of the failed operation (default: 'none')
351
+ * @param appResultCode - The error result code (default: 'none')
352
+ * @param serviceTime - The service processing time in milliseconds (default: 0)
353
+ * @param originateServiceName - The originating service name (default: 'none')
354
+ * @param recordName - The record identifier (default: 'none')
355
+ * @param sessionId - The session identifier (default: 'none')
356
+ * @param transactionId - The transaction identifier (default: 'none')
357
+ * @param channel - The channel identifier (default: 'none')
358
+ * @param componentVersion - The component version (default: 'none')
359
+ * @param useCase - The use case (default: 'none')
360
+ * @param useCaseStep - The use case step (default: 'none')
361
+ * @param user - The user identifier (default: 'none')
362
+ * @param device - The device identifier(s) (default: 'none')
363
+ * @param public_ - Public identifier (default: 'none')
364
+ * @param stack - Optional error stack trace array
365
+ * @param opt - Optional logging options
366
+ * @returns The created LoggerDto object
367
+ */
368
+ summaryError(appResult = logger_constants_1.DEFAULT_VALUES.NONE, appResultCode = logger_constants_1.DEFAULT_VALUES.NONE, serviceTime = 0, originateServiceName = logger_constants_1.DEFAULT_VALUES.NONE, recordName = logger_constants_1.DEFAULT_VALUES.NONE, sessionId = logger_constants_1.DEFAULT_VALUES.NONE, transactionId = logger_constants_1.DEFAULT_VALUES.NONE, channel = logger_constants_1.DEFAULT_VALUES.NONE, componentVersion = logger_constants_1.DEFAULT_VALUES.NONE, useCase = logger_constants_1.DEFAULT_VALUES.NONE, useCaseStep = logger_constants_1.DEFAULT_VALUES.NONE, user = logger_constants_1.DEFAULT_VALUES.NONE, device = logger_constants_1.DEFAULT_VALUES.NONE, public_ = logger_constants_1.DEFAULT_VALUES.NONE, stack, opt) {
369
+ const loggerDetail = this.createSummaryLog(logger_constants_1.LOG_LEVELS.ERROR, appResult, appResultCode, serviceTime, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt, stack);
370
+ this.flushLog(loggerDetail);
371
+ this.pushLogToOpenTelemetry(loggerDetail, api_logs_1.SeverityNumber.ERROR);
372
+ this.recordTelemetry(appResultCode, appResult, recordName, useCase, serviceTime, originateServiceName, false, stack);
373
+ return loggerDetail;
374
+ }
375
+ /**
376
+ * Creates a summary log entry with specialized fields for operation results.
377
+ * Transforms the log structure by removing message/action fields and adding summary-specific fields.
378
+ *
379
+ * @param level - The log level (info for success, error for failure)
380
+ * @param appResult - The result description
381
+ * @param appResultCode - The result code
382
+ * @param serviceTime - The service processing time in milliseconds
383
+ * @param originateServiceName - The originating service name
384
+ * @param recordName - The record identifier
385
+ * @param sessionId - The session identifier
386
+ * @param transactionId - The transaction identifier
387
+ * @param channel - The channel identifier
388
+ * @param componentVersion - The component version
389
+ * @param useCase - The use case
390
+ * @param useCaseStep - The use case step
391
+ * @param user - The user identifier
392
+ * @param device - The device identifier(s)
393
+ * @param public_ - Public identifier
394
+ * @param opt - Optional logging options
395
+ * @param stack - Optional error stack trace array
396
+ * @returns The created summary LoggerDto object
397
+ */
398
+ createSummaryLog(level, appResult, appResultCode, serviceTime, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt, stack) {
399
+ const loggerDetail = this.initializeAppLogger(level, undefined, undefined, originateServiceName, recordName, sessionId, transactionId, channel, componentVersion, useCase, useCaseStep, user, device, public_, opt);
400
+ // Optimize by directly modifying properties instead of delete operations
401
+ loggerDetail.message = undefined;
402
+ loggerDetail.action = undefined;
403
+ loggerDetail.dateTime = loggerDetail.timestamp;
404
+ loggerDetail.timestamp = undefined;
405
+ loggerDetail.recordType = logger_constants_1.DEFAULT_VALUES.RECORD_TYPE_SUMMARY;
406
+ loggerDetail.appResult = appResult;
407
+ loggerDetail.appResultCode = appResultCode;
408
+ loggerDetail.serviceTime = serviceTime;
409
+ if (stack) {
410
+ loggerDetail.stack = stack;
411
+ }
412
+ return loggerDetail;
413
+ }
414
+ /**
415
+ * Pushes log data to OpenTelemetry Logs API.
416
+ * Emits a log record with structured attributes for observability platforms.
417
+ *
418
+ * @param loggerDetail - The logger DTO containing log details
419
+ * @param severityNumber - The OpenTelemetry severity level
420
+ */
421
+ pushLogToOpenTelemetry(loggerDetail, severityNumber) {
422
+ const attributes = {
423
+ 'log.type': 'summary',
424
+ 'app.result': loggerDetail.appResult,
425
+ 'app.result.code': loggerDetail.appResultCode,
426
+ 'service.time': loggerDetail.serviceTime,
427
+ 'originate.service.name': loggerDetail.originateServiceName,
428
+ 'record.name': loggerDetail.recordName,
429
+ 'session.id': loggerDetail.sessionId,
430
+ 'transaction.id': loggerDetail.transactionId,
431
+ channel: loggerDetail.channel,
432
+ 'use.case': loggerDetail.useCase,
433
+ 'use.case.step': loggerDetail.useCaseStep,
434
+ user: loggerDetail.user,
435
+ device: Array.isArray(loggerDetail.device)
436
+ ? loggerDetail.device.join(',')
437
+ : loggerDetail.device,
438
+ instance: loggerDetail.instance,
439
+ 'component.name': loggerDetail.componentName,
440
+ 'component.version': loggerDetail.componentVersion,
441
+ };
442
+ // Add stack trace for error logs
443
+ if (loggerDetail.stack && loggerDetail.stack.length > 0) {
444
+ attributes.stack = loggerDetail.stack;
445
+ }
446
+ this.otelLogger.emit({
447
+ severityNumber: severityNumber,
448
+ severityText: loggerDetail.level,
449
+ body: JSON.stringify(loggerDetail, this.jsonTransformer),
450
+ attributes: attributes,
451
+ timestamp: Date.now(),
452
+ });
453
+ }
454
+ /**
455
+ * Records telemetry data to OpenTelemetry for monitoring and observability.
456
+ * Creates metrics (counter, histogram) and a distributed trace span with operation details.
457
+ * Skips recording if the result code is in the ignore list.
458
+ *
459
+ * @param appResultCode - The result code to record
460
+ * @param appResult - The result description
461
+ * @param recordName - The record identifier
462
+ * @param useCase - The use case being executed
463
+ * @param serviceTime - The service processing time in milliseconds
464
+ * @param originateServiceName - The originating service name
465
+ * @param success - Whether the operation was successful
466
+ * @param stack - Optional error stack trace array
467
+ */
468
+ recordTelemetry(appResultCode, appResult, recordName, useCase, serviceTime, originateServiceName, success, stack) {
469
+ if (this.ignoreAppResultCodeOnTelemetry.includes(appResultCode)) {
470
+ return;
471
+ }
472
+ const attributes = {
473
+ resultCode: this.setMetricAttrToNone(appResultCode),
474
+ result: this.setMetricAttrToNone(appResult),
475
+ recordName: this.setMetricAttrToNone(recordName),
476
+ useCase: this.setMetricAttrToNone(useCase),
477
+ resultType: logger_constants_1.DEFAULT_VALUES.RECORD_TYPE_SUMMARY,
478
+ hostname: this.cachedHostname,
479
+ componentName: this.context,
480
+ destination: process.env.DESTINATION || logger_constants_1.DEFAULT_VALUES.NONE,
481
+ };
482
+ this.allMetric.add(1, attributes);
483
+ this.histrogramMetric.record(serviceTime, attributes);
484
+ this.tracer.startActiveSpan(logger_constants_1.DEFAULT_VALUES.RECORD_TYPE_SUMMARY, async (span) => {
485
+ span.setAttribute('application.code', this.setMetricAttrToNone(appResultCode));
486
+ span.setAttribute('application.success', success);
487
+ span.setAttribute('application.duration', serviceTime);
488
+ span.setAttribute('application.time', new Date().toISOString());
489
+ span.setAttribute('application.source', this.setMetricAttrToNone(originateServiceName));
490
+ if (stack) {
491
+ span.setAttribute('application.stack', stack);
492
+ }
493
+ span.setStatus({
494
+ code: success ? api_1.SpanStatusCode.OK : api_1.SpanStatusCode.ERROR,
495
+ });
496
+ span.end();
497
+ });
498
+ }
499
+ /**
500
+ * Transforms JSON values during serialization by converting empty strings to 'none'.
501
+ * Used as a JSON.stringify replacer function to ensure consistent default values.
502
+ *
503
+ * @param key - The JSON key being processed
504
+ * @param value - The value to transform
505
+ * @returns The transformed value ('none' if empty string, otherwise the original value)
506
+ */
507
+ jsonTransformer(key, value) {
508
+ return value === '' ? logger_constants_1.DEFAULT_VALUES.NONE : value;
509
+ }
510
+ };
511
+ exports.BaseAppLogger = BaseAppLogger;
512
+ exports.BaseAppLogger = BaseAppLogger = __decorate([
513
+ __param(0, (0, common_1.Optional)()),
514
+ __param(1, (0, common_1.Optional)()),
515
+ __metadata("design:paramtypes", [String, String])
516
+ ], BaseAppLogger);
517
+ //# sourceMappingURL=base-app.logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-app.logger.js","sourceRoot":"","sources":["../../../src/core/loggers/base-app.logger.ts"],"names":[],"mappings":"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"}