@rabbit-company/logger 5.4.0 → 5.6.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.
package/README.md CHANGED
@@ -49,6 +49,9 @@ logger.error("Database connection failed", {
49
49
  db: "primary",
50
50
  });
51
51
 
52
+ // Dynamic log levels
53
+ logger.log(Levels.WARN, "High memory usage detected", { usage: "85%" });
54
+
52
55
  // Audit logging
53
56
  logger.audit("User login", {
54
57
  userId: "usr_123",
@@ -528,6 +528,21 @@ export declare class Logger {
528
528
  * @param entry The log entry to process
529
529
  */
530
530
  private processEntry;
531
+ /**
532
+ * Logs a message at the specified level with optional metadata.
533
+ *
534
+ * This is the primary logging method that all other level-specific methods
535
+ * (error, warn, info, etc.) delegate to. It provides fine-grained control
536
+ * over the log level and is useful for dynamic logging scenarios.
537
+ *
538
+ * @param level - The severity level for this log entry (use Levels enum)
539
+ * @param message - The log message to record
540
+ * @param metadata - Optional structured data to attach to the log entry
541
+ *
542
+ * @example
543
+ * logger.log(Levels.ERROR, "Database connection failed", { error: error.stack });
544
+ */
545
+ log(level: Levels, message: string, metadata?: Record<string, any>): void;
531
546
  /**
532
547
  * Logs an error message (highest severity)
533
548
  * @param message The error message
package/module/logger.js CHANGED
@@ -129,6 +129,40 @@ class Logger {
129
129
  return this.level >= level;
130
130
  }
131
131
  createLogEntry(message, level, metadata) {
132
+ if (metadata instanceof Error) {
133
+ return {
134
+ message,
135
+ level,
136
+ timestamp: Date.now(),
137
+ metadata: {
138
+ error: {
139
+ name: metadata.name,
140
+ message: metadata.message,
141
+ stack: metadata.stack
142
+ }
143
+ }
144
+ };
145
+ }
146
+ if (metadata && typeof metadata === "object") {
147
+ const processedMetadata = {};
148
+ for (const [key, value] of Object.entries(metadata)) {
149
+ if (value instanceof Error) {
150
+ processedMetadata[key] = {
151
+ name: value.name,
152
+ message: value.message,
153
+ stack: value.stack
154
+ };
155
+ } else {
156
+ processedMetadata[key] = value;
157
+ }
158
+ }
159
+ return {
160
+ message,
161
+ level,
162
+ timestamp: Date.now(),
163
+ metadata: processedMetadata
164
+ };
165
+ }
132
166
  return {
133
167
  message,
134
168
  level,
@@ -143,29 +177,32 @@ class Logger {
143
177
  transport.log(entry);
144
178
  }
145
179
  }
180
+ log(level, message, metadata) {
181
+ this.processEntry(this.createLogEntry(message, level, metadata));
182
+ }
146
183
  error(message, metadata) {
147
- this.processEntry(this.createLogEntry(message, 0 /* ERROR */, metadata));
184
+ this.log(0 /* ERROR */, message, metadata);
148
185
  }
149
186
  warn(message, metadata) {
150
- this.processEntry(this.createLogEntry(message, 1 /* WARN */, metadata));
187
+ this.log(1 /* WARN */, message, metadata);
151
188
  }
152
189
  audit(message, metadata) {
153
- this.processEntry(this.createLogEntry(message, 2 /* AUDIT */, metadata));
190
+ this.log(2 /* AUDIT */, message, metadata);
154
191
  }
155
192
  info(message, metadata) {
156
- this.processEntry(this.createLogEntry(message, 3 /* INFO */, metadata));
193
+ this.log(3 /* INFO */, message, metadata);
157
194
  }
158
195
  http(message, metadata) {
159
- this.processEntry(this.createLogEntry(message, 4 /* HTTP */, metadata));
196
+ this.log(4 /* HTTP */, message, metadata);
160
197
  }
161
198
  debug(message, metadata) {
162
- this.processEntry(this.createLogEntry(message, 5 /* DEBUG */, metadata));
199
+ this.log(5 /* DEBUG */, message, metadata);
163
200
  }
164
201
  verbose(message, metadata) {
165
- this.processEntry(this.createLogEntry(message, 6 /* VERBOSE */, metadata));
202
+ this.log(6 /* VERBOSE */, message, metadata);
166
203
  }
167
204
  silly(message, metadata) {
168
- this.processEntry(this.createLogEntry(message, 7 /* SILLY */, metadata));
205
+ this.log(7 /* SILLY */, message, metadata);
169
206
  }
170
207
  addTransport(transport) {
171
208
  this.transports.push(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rabbit-company/logger",
3
- "version": "5.4.0",
3
+ "version": "5.6.0",
4
4
  "description": "A simple and lightweight logger",
5
5
  "main": "./module/logger.js",
6
6
  "type": "module",
@@ -39,6 +39,6 @@
39
39
  "bun-plugin-dts": "^0.3.0"
40
40
  },
41
41
  "peerDependencies": {
42
- "typescript": "^5.5.4"
42
+ "typescript": "^5.8.3"
43
43
  }
44
44
  }