@noego/logger 0.0.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.
Files changed (56) hide show
  1. package/README.md +62 -0
  2. package/dist/core/abstract_logger.cjs +140 -0
  3. package/dist/core/abstract_logger.cjs.map +1 -0
  4. package/dist/core/abstract_logger.d.cts +55 -0
  5. package/dist/core/abstract_logger.d.ts +55 -0
  6. package/dist/core/abstract_logger.js +116 -0
  7. package/dist/core/abstract_logger.js.map +1 -0
  8. package/dist/core/log_level.cjs +78 -0
  9. package/dist/core/log_level.cjs.map +1 -0
  10. package/dist/core/log_level.d.cts +12 -0
  11. package/dist/core/log_level.d.ts +12 -0
  12. package/dist/core/log_level.js +52 -0
  13. package/dist/core/log_level.js.map +1 -0
  14. package/dist/core/log_transport.cjs +17 -0
  15. package/dist/core/log_transport.cjs.map +1 -0
  16. package/dist/core/log_transport.d.cts +15 -0
  17. package/dist/core/log_transport.d.ts +15 -0
  18. package/dist/core/log_transport.js +1 -0
  19. package/dist/core/log_transport.js.map +1 -0
  20. package/dist/core/logging_manager.cjs +130 -0
  21. package/dist/core/logging_manager.cjs.map +1 -0
  22. package/dist/core/logging_manager.d.cts +44 -0
  23. package/dist/core/logging_manager.d.ts +44 -0
  24. package/dist/core/logging_manager.js +103 -0
  25. package/dist/core/logging_manager.js.map +1 -0
  26. package/dist/get_logger.cjs +33 -0
  27. package/dist/get_logger.cjs.map +1 -0
  28. package/dist/get_logger.d.cts +25 -0
  29. package/dist/get_logger.d.ts +25 -0
  30. package/dist/get_logger.js +9 -0
  31. package/dist/get_logger.js.map +1 -0
  32. package/dist/index.cjs +48 -0
  33. package/dist/index.cjs.map +1 -0
  34. package/dist/index.d.cts +6 -0
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.js +16 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/ioc/index.cjs +34 -0
  39. package/dist/ioc/index.cjs.map +1 -0
  40. package/dist/ioc/index.d.cts +41 -0
  41. package/dist/ioc/index.d.ts +41 -0
  42. package/dist/ioc/index.js +10 -0
  43. package/dist/ioc/index.js.map +1 -0
  44. package/dist/transports/console.cjs +31 -0
  45. package/dist/transports/console.cjs.map +1 -0
  46. package/dist/transports/console.d.cts +2 -0
  47. package/dist/transports/console.d.ts +2 -0
  48. package/dist/transports/console.js +7 -0
  49. package/dist/transports/console.js.map +1 -0
  50. package/dist/transports/console_transport.cjs +48 -0
  51. package/dist/transports/console_transport.cjs.map +1 -0
  52. package/dist/transports/console_transport.d.cts +7 -0
  53. package/dist/transports/console_transport.d.ts +7 -0
  54. package/dist/transports/console_transport.js +24 -0
  55. package/dist/transports/console_transport.js.map +1 -0
  56. package/package.json +61 -0
package/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # @noego/logger
2
+
3
+ Lightweight logging for Node.js with:
4
+
5
+ - level filtering (`TRACE` to `FATAL`)
6
+ - named loggers
7
+ - contextual metadata
8
+ - pluggable transports
9
+ - optional `@noego/ioc` integration
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ npm install @noego/logger
15
+ ```
16
+
17
+ ## Quick Start
18
+
19
+ ```ts
20
+ import { getLogger, configureLogging, LogLevel } from "@noego/logger";
21
+
22
+ configureLogging({
23
+ level: LogLevel.INFO,
24
+ serviceName: "my-service",
25
+ });
26
+
27
+ const logger = getLogger("api");
28
+ logger.info("Server started", { port: 3000 });
29
+ logger.error("Request failed", new Error("boom"));
30
+ ```
31
+
32
+ ## Context and Named Loggers
33
+
34
+ ```ts
35
+ const base = getLogger("http").withContext({ requestId: "req_123" });
36
+
37
+ base.info("Incoming request");
38
+ base.named("auth").warn("Invalid token", { userId: "u_42" });
39
+ ```
40
+
41
+ ## IoC Integration
42
+
43
+ ```ts
44
+ import { createContainer } from "@noego/ioc";
45
+ import { registerLoggerFactory } from "@noego/logger/ioc";
46
+
47
+ const container = createContainer();
48
+ registerLoggerFactory(container, Symbol.for("app:logger"), "app");
49
+ ```
50
+
51
+ ## API
52
+
53
+ - `getLogger(name)` -> logger instance
54
+ - `configureLogging(options)` -> configure global manager
55
+ - `shutdown()` -> close all transports
56
+ - `ConsoleTransport` -> default console transport implementation
57
+
58
+ ## Environment Variables
59
+
60
+ - `LOG_LEVEL` (default: inferred by library, typically `INFO`)
61
+ - `SERVICE_NAME` (default: `noego`)
62
+ - `NODE_ENV` (default: `development`)
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var abstract_logger_exports = {};
20
+ __export(abstract_logger_exports, {
21
+ NamedLogger: () => NamedLogger
22
+ });
23
+ module.exports = __toCommonJS(abstract_logger_exports);
24
+ var import_log_level = require("./log_level.cjs");
25
+ function safeJsonStringify(value) {
26
+ const seen = /* @__PURE__ */ new WeakSet();
27
+ try {
28
+ return JSON.stringify(value, (_key, val) => {
29
+ if (typeof val === "bigint") return val.toString();
30
+ if (typeof val === "object" && val !== null) {
31
+ if (seen.has(val)) return "[Circular]";
32
+ seen.add(val);
33
+ }
34
+ if (val instanceof Error) {
35
+ return { name: val.name, message: val.message, stack: val.stack };
36
+ }
37
+ return val;
38
+ });
39
+ } catch {
40
+ return '"[Unserializable]"';
41
+ }
42
+ }
43
+ function formatArg(arg) {
44
+ if (arg === void 0) return "undefined";
45
+ if (arg === null) return null;
46
+ if (arg instanceof Error) {
47
+ return { name: arg.name, message: arg.message, stack: arg.stack };
48
+ }
49
+ switch (typeof arg) {
50
+ case "string":
51
+ case "number":
52
+ case "boolean":
53
+ return arg;
54
+ case "bigint":
55
+ return arg.toString();
56
+ case "symbol":
57
+ return String(arg);
58
+ case "function":
59
+ return `[Function${arg.name ? `: ${arg.name}` : ""}]`;
60
+ default:
61
+ return arg;
62
+ }
63
+ }
64
+ function formatArgAsString(arg) {
65
+ const formatted = formatArg(arg);
66
+ if (typeof formatted === "string") return formatted;
67
+ return safeJsonStringify(formatted);
68
+ }
69
+ class AbstractLogger {
70
+ constructor(name, manager, contextData) {
71
+ this.name = name;
72
+ this.manager = manager;
73
+ this.contextData = contextData;
74
+ }
75
+ /**
76
+ * Creates a new logger with the specified name.
77
+ * Replaces the current logger's name (not hierarchical).
78
+ */
79
+ named(name) {
80
+ return new NamedLogger(name, this.manager, this.contextData);
81
+ }
82
+ /**
83
+ * Creates a new logger with additional context.
84
+ * Context is merged into every log entry's context field.
85
+ * If this logger already has context, both contexts are merged.
86
+ * Returns a new logger instance (immutable operation).
87
+ */
88
+ withContext(context) {
89
+ const mergedContext = this.contextData ? { ...this.contextData, ...context } : context;
90
+ return new NamedLogger(this.name, this.manager, mergedContext);
91
+ }
92
+ trace(message, ...args) {
93
+ this.log(import_log_level.LogLevel.TRACE, message, args);
94
+ }
95
+ debug(message, ...args) {
96
+ this.log(import_log_level.LogLevel.DEBUG, message, args);
97
+ }
98
+ info(message, ...args) {
99
+ this.log(import_log_level.LogLevel.INFO, message, args);
100
+ }
101
+ warn(message, ...args) {
102
+ this.log(import_log_level.LogLevel.WARN, message, args);
103
+ }
104
+ error(message, ...args) {
105
+ this.log(import_log_level.LogLevel.ERROR, message, args);
106
+ }
107
+ fatal(message, ...args) {
108
+ this.log(import_log_level.LogLevel.FATAL, message, args);
109
+ }
110
+ log(level, message, args) {
111
+ if (!this.manager.shouldLog(level, this.name)) return;
112
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
113
+ let argsContext = args.length > 0 ? args.length === 1 ? formatArg(args[0]) : args.map(formatArg) : void 0;
114
+ let context;
115
+ if (this.contextData && argsContext !== void 0) {
116
+ context = { ...this.contextData, args: argsContext };
117
+ } else if (this.contextData) {
118
+ context = this.contextData;
119
+ } else {
120
+ context = argsContext;
121
+ }
122
+ this.manager.log({
123
+ timestamp,
124
+ level: (0, import_log_level.logLevelName)(level),
125
+ logger: this.name,
126
+ message,
127
+ context
128
+ });
129
+ }
130
+ }
131
+ class NamedLogger extends AbstractLogger {
132
+ constructor(name, manager, contextData) {
133
+ super(name, manager, contextData);
134
+ }
135
+ }
136
+ // Annotate the CommonJS export names for ESM import in node:
137
+ 0 && (module.exports = {
138
+ NamedLogger
139
+ });
140
+ //# sourceMappingURL=abstract_logger.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/abstract_logger.ts"],"sourcesContent":["import { LogLevel, logLevelName } from \"./log_level.cjs\";\nimport type { LogEntry } from \"./log_transport.cjs\";\nimport type { LoggingManager } from \"./logging_manager.cjs\";\n\n/**\n * Safely stringifies values, handling circular references, bigints, Errors, and symbols.\n */\nfunction safeJsonStringify(value: unknown): string {\n const seen = new WeakSet<object>();\n try {\n return JSON.stringify(value, (_key, val: unknown) => {\n if (typeof val === \"bigint\") return val.toString();\n if (typeof val === \"object\" && val !== null) {\n if (seen.has(val)) return \"[Circular]\";\n seen.add(val);\n }\n if (val instanceof Error) {\n return { name: val.name, message: val.message, stack: val.stack };\n }\n return val;\n });\n } catch {\n return '\"[Unserializable]\"';\n }\n}\n\n/**\n * Formats an argument for logging, converting special types to loggable values.\n */\nfunction formatArg(arg: unknown): unknown {\n if (arg === undefined) return \"undefined\";\n if (arg === null) return null;\n\n if (arg instanceof Error) {\n return { name: arg.name, message: arg.message, stack: arg.stack };\n }\n\n switch (typeof arg) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return arg;\n case \"bigint\":\n return arg.toString();\n case \"symbol\":\n return String(arg);\n case \"function\":\n return `[Function${arg.name ? `: ${arg.name}` : \"\"}]`;\n default:\n return arg;\n }\n}\n\n/**\n * Formats an argument as a string for logging.\n */\nfunction formatArgAsString(arg: unknown): string {\n const formatted = formatArg(arg);\n if (typeof formatted === \"string\") return formatted;\n return safeJsonStringify(formatted);\n}\n\n/**\n * Public logger interface with all logging methods.\n */\nexport interface Logger {\n named(name: string): Logger;\n withContext(context: Record<string, unknown>): Logger;\n trace(message: string, ...args: unknown[]): void;\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n fatal(message: string, ...args: unknown[]): void;\n}\n\n/**\n * Base logger class providing logging functionality.\n * Not exported directly; use Logger interface and NamedLogger class.\n */\nabstract class AbstractLogger implements Logger {\n protected constructor(\n private readonly name: string,\n protected readonly manager: LoggingManager,\n private readonly contextData?: Record<string, unknown>\n ) {}\n\n /**\n * Creates a new logger with the specified name.\n * Replaces the current logger's name (not hierarchical).\n */\n named(name: string): Logger {\n return new NamedLogger(name, this.manager, this.contextData);\n }\n\n /**\n * Creates a new logger with additional context.\n * Context is merged into every log entry's context field.\n * If this logger already has context, both contexts are merged.\n * Returns a new logger instance (immutable operation).\n */\n withContext(context: Record<string, unknown>): Logger {\n const mergedContext = this.contextData\n ? { ...this.contextData, ...context }\n : context;\n return new NamedLogger(this.name, this.manager, mergedContext);\n }\n\n trace(message: string, ...args: unknown[]): void {\n this.log(LogLevel.TRACE, message, args);\n }\n\n debug(message: string, ...args: unknown[]): void {\n this.log(LogLevel.DEBUG, message, args);\n }\n\n info(message: string, ...args: unknown[]): void {\n this.log(LogLevel.INFO, message, args);\n }\n\n warn(message: string, ...args: unknown[]): void {\n this.log(LogLevel.WARN, message, args);\n }\n\n error(message: string, ...args: unknown[]): void {\n this.log(LogLevel.ERROR, message, args);\n }\n\n fatal(message: string, ...args: unknown[]): void {\n this.log(LogLevel.FATAL, message, args);\n }\n\n private log(level: LogLevel, message: string, args: unknown[]): void {\n // Pass logger name to support per-logger level overrides\n if (!this.manager.shouldLog(level, this.name)) return;\n\n const timestamp = new Date().toISOString();\n\n // Format args as context\n let argsContext = args.length > 0\n ? (args.length === 1 ? formatArg(args[0]) : args.map(formatArg))\n : undefined;\n\n // Merge with contextData if present\n let context: unknown;\n if (this.contextData && argsContext !== undefined) {\n // Both contextData and args exist - merge them\n context = { ...this.contextData, args: argsContext };\n } else if (this.contextData) {\n // Only contextData exists\n context = this.contextData;\n } else {\n // Only args exist (or neither)\n context = argsContext;\n }\n\n this.manager.log({\n timestamp,\n level: logLevelName(level),\n logger: this.name,\n message,\n context,\n });\n }\n}\n\n/**\n * Public-facing logger class with a specific name.\n * Use getLogger() factory to create instances.\n */\nexport class NamedLogger extends AbstractLogger {\n constructor(\n name: string,\n manager: LoggingManager,\n contextData?: Record<string, unknown>\n ) {\n super(name, manager, contextData);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,55 @@
1
+ import { LoggingManager } from './logging_manager.cjs';
2
+ import './log_level.cjs';
3
+ import './log_transport.cjs';
4
+
5
+ /**
6
+ * Public logger interface with all logging methods.
7
+ */
8
+ interface Logger {
9
+ named(name: string): Logger;
10
+ withContext(context: Record<string, unknown>): Logger;
11
+ trace(message: string, ...args: unknown[]): void;
12
+ debug(message: string, ...args: unknown[]): void;
13
+ info(message: string, ...args: unknown[]): void;
14
+ warn(message: string, ...args: unknown[]): void;
15
+ error(message: string, ...args: unknown[]): void;
16
+ fatal(message: string, ...args: unknown[]): void;
17
+ }
18
+ /**
19
+ * Base logger class providing logging functionality.
20
+ * Not exported directly; use Logger interface and NamedLogger class.
21
+ */
22
+ declare abstract class AbstractLogger implements Logger {
23
+ private readonly name;
24
+ protected readonly manager: LoggingManager;
25
+ private readonly contextData?;
26
+ protected constructor(name: string, manager: LoggingManager, contextData?: Record<string, unknown> | undefined);
27
+ /**
28
+ * Creates a new logger with the specified name.
29
+ * Replaces the current logger's name (not hierarchical).
30
+ */
31
+ named(name: string): Logger;
32
+ /**
33
+ * Creates a new logger with additional context.
34
+ * Context is merged into every log entry's context field.
35
+ * If this logger already has context, both contexts are merged.
36
+ * Returns a new logger instance (immutable operation).
37
+ */
38
+ withContext(context: Record<string, unknown>): Logger;
39
+ trace(message: string, ...args: unknown[]): void;
40
+ debug(message: string, ...args: unknown[]): void;
41
+ info(message: string, ...args: unknown[]): void;
42
+ warn(message: string, ...args: unknown[]): void;
43
+ error(message: string, ...args: unknown[]): void;
44
+ fatal(message: string, ...args: unknown[]): void;
45
+ private log;
46
+ }
47
+ /**
48
+ * Public-facing logger class with a specific name.
49
+ * Use getLogger() factory to create instances.
50
+ */
51
+ declare class NamedLogger extends AbstractLogger {
52
+ constructor(name: string, manager: LoggingManager, contextData?: Record<string, unknown>);
53
+ }
54
+
55
+ export { type Logger, NamedLogger };
@@ -0,0 +1,55 @@
1
+ import { LoggingManager } from './logging_manager.js';
2
+ import './log_level.js';
3
+ import './log_transport.js';
4
+
5
+ /**
6
+ * Public logger interface with all logging methods.
7
+ */
8
+ interface Logger {
9
+ named(name: string): Logger;
10
+ withContext(context: Record<string, unknown>): Logger;
11
+ trace(message: string, ...args: unknown[]): void;
12
+ debug(message: string, ...args: unknown[]): void;
13
+ info(message: string, ...args: unknown[]): void;
14
+ warn(message: string, ...args: unknown[]): void;
15
+ error(message: string, ...args: unknown[]): void;
16
+ fatal(message: string, ...args: unknown[]): void;
17
+ }
18
+ /**
19
+ * Base logger class providing logging functionality.
20
+ * Not exported directly; use Logger interface and NamedLogger class.
21
+ */
22
+ declare abstract class AbstractLogger implements Logger {
23
+ private readonly name;
24
+ protected readonly manager: LoggingManager;
25
+ private readonly contextData?;
26
+ protected constructor(name: string, manager: LoggingManager, contextData?: Record<string, unknown> | undefined);
27
+ /**
28
+ * Creates a new logger with the specified name.
29
+ * Replaces the current logger's name (not hierarchical).
30
+ */
31
+ named(name: string): Logger;
32
+ /**
33
+ * Creates a new logger with additional context.
34
+ * Context is merged into every log entry's context field.
35
+ * If this logger already has context, both contexts are merged.
36
+ * Returns a new logger instance (immutable operation).
37
+ */
38
+ withContext(context: Record<string, unknown>): Logger;
39
+ trace(message: string, ...args: unknown[]): void;
40
+ debug(message: string, ...args: unknown[]): void;
41
+ info(message: string, ...args: unknown[]): void;
42
+ warn(message: string, ...args: unknown[]): void;
43
+ error(message: string, ...args: unknown[]): void;
44
+ fatal(message: string, ...args: unknown[]): void;
45
+ private log;
46
+ }
47
+ /**
48
+ * Public-facing logger class with a specific name.
49
+ * Use getLogger() factory to create instances.
50
+ */
51
+ declare class NamedLogger extends AbstractLogger {
52
+ constructor(name: string, manager: LoggingManager, contextData?: Record<string, unknown>);
53
+ }
54
+
55
+ export { type Logger, NamedLogger };
@@ -0,0 +1,116 @@
1
+ import { LogLevel, logLevelName } from "./log_level.js";
2
+ function safeJsonStringify(value) {
3
+ const seen = /* @__PURE__ */ new WeakSet();
4
+ try {
5
+ return JSON.stringify(value, (_key, val) => {
6
+ if (typeof val === "bigint") return val.toString();
7
+ if (typeof val === "object" && val !== null) {
8
+ if (seen.has(val)) return "[Circular]";
9
+ seen.add(val);
10
+ }
11
+ if (val instanceof Error) {
12
+ return { name: val.name, message: val.message, stack: val.stack };
13
+ }
14
+ return val;
15
+ });
16
+ } catch {
17
+ return '"[Unserializable]"';
18
+ }
19
+ }
20
+ function formatArg(arg) {
21
+ if (arg === void 0) return "undefined";
22
+ if (arg === null) return null;
23
+ if (arg instanceof Error) {
24
+ return { name: arg.name, message: arg.message, stack: arg.stack };
25
+ }
26
+ switch (typeof arg) {
27
+ case "string":
28
+ case "number":
29
+ case "boolean":
30
+ return arg;
31
+ case "bigint":
32
+ return arg.toString();
33
+ case "symbol":
34
+ return String(arg);
35
+ case "function":
36
+ return `[Function${arg.name ? `: ${arg.name}` : ""}]`;
37
+ default:
38
+ return arg;
39
+ }
40
+ }
41
+ function formatArgAsString(arg) {
42
+ const formatted = formatArg(arg);
43
+ if (typeof formatted === "string") return formatted;
44
+ return safeJsonStringify(formatted);
45
+ }
46
+ class AbstractLogger {
47
+ constructor(name, manager, contextData) {
48
+ this.name = name;
49
+ this.manager = manager;
50
+ this.contextData = contextData;
51
+ }
52
+ /**
53
+ * Creates a new logger with the specified name.
54
+ * Replaces the current logger's name (not hierarchical).
55
+ */
56
+ named(name) {
57
+ return new NamedLogger(name, this.manager, this.contextData);
58
+ }
59
+ /**
60
+ * Creates a new logger with additional context.
61
+ * Context is merged into every log entry's context field.
62
+ * If this logger already has context, both contexts are merged.
63
+ * Returns a new logger instance (immutable operation).
64
+ */
65
+ withContext(context) {
66
+ const mergedContext = this.contextData ? { ...this.contextData, ...context } : context;
67
+ return new NamedLogger(this.name, this.manager, mergedContext);
68
+ }
69
+ trace(message, ...args) {
70
+ this.log(LogLevel.TRACE, message, args);
71
+ }
72
+ debug(message, ...args) {
73
+ this.log(LogLevel.DEBUG, message, args);
74
+ }
75
+ info(message, ...args) {
76
+ this.log(LogLevel.INFO, message, args);
77
+ }
78
+ warn(message, ...args) {
79
+ this.log(LogLevel.WARN, message, args);
80
+ }
81
+ error(message, ...args) {
82
+ this.log(LogLevel.ERROR, message, args);
83
+ }
84
+ fatal(message, ...args) {
85
+ this.log(LogLevel.FATAL, message, args);
86
+ }
87
+ log(level, message, args) {
88
+ if (!this.manager.shouldLog(level, this.name)) return;
89
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
90
+ let argsContext = args.length > 0 ? args.length === 1 ? formatArg(args[0]) : args.map(formatArg) : void 0;
91
+ let context;
92
+ if (this.contextData && argsContext !== void 0) {
93
+ context = { ...this.contextData, args: argsContext };
94
+ } else if (this.contextData) {
95
+ context = this.contextData;
96
+ } else {
97
+ context = argsContext;
98
+ }
99
+ this.manager.log({
100
+ timestamp,
101
+ level: logLevelName(level),
102
+ logger: this.name,
103
+ message,
104
+ context
105
+ });
106
+ }
107
+ }
108
+ class NamedLogger extends AbstractLogger {
109
+ constructor(name, manager, contextData) {
110
+ super(name, manager, contextData);
111
+ }
112
+ }
113
+ export {
114
+ NamedLogger
115
+ };
116
+ //# sourceMappingURL=abstract_logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/abstract_logger.ts"],"sourcesContent":["import { LogLevel, logLevelName } from \"./log_level.js\";\nimport type { LogEntry } from \"./log_transport.js\";\nimport type { LoggingManager } from \"./logging_manager.js\";\n\n/**\n * Safely stringifies values, handling circular references, bigints, Errors, and symbols.\n */\nfunction safeJsonStringify(value: unknown): string {\n const seen = new WeakSet<object>();\n try {\n return JSON.stringify(value, (_key, val: unknown) => {\n if (typeof val === \"bigint\") return val.toString();\n if (typeof val === \"object\" && val !== null) {\n if (seen.has(val)) return \"[Circular]\";\n seen.add(val);\n }\n if (val instanceof Error) {\n return { name: val.name, message: val.message, stack: val.stack };\n }\n return val;\n });\n } catch {\n return '\"[Unserializable]\"';\n }\n}\n\n/**\n * Formats an argument for logging, converting special types to loggable values.\n */\nfunction formatArg(arg: unknown): unknown {\n if (arg === undefined) return \"undefined\";\n if (arg === null) return null;\n\n if (arg instanceof Error) {\n return { name: arg.name, message: arg.message, stack: arg.stack };\n }\n\n switch (typeof arg) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return arg;\n case \"bigint\":\n return arg.toString();\n case \"symbol\":\n return String(arg);\n case \"function\":\n return `[Function${arg.name ? `: ${arg.name}` : \"\"}]`;\n default:\n return arg;\n }\n}\n\n/**\n * Formats an argument as a string for logging.\n */\nfunction formatArgAsString(arg: unknown): string {\n const formatted = formatArg(arg);\n if (typeof formatted === \"string\") return formatted;\n return safeJsonStringify(formatted);\n}\n\n/**\n * Public logger interface with all logging methods.\n */\nexport interface Logger {\n named(name: string): Logger;\n withContext(context: Record<string, unknown>): Logger;\n trace(message: string, ...args: unknown[]): void;\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n fatal(message: string, ...args: unknown[]): void;\n}\n\n/**\n * Base logger class providing logging functionality.\n * Not exported directly; use Logger interface and NamedLogger class.\n */\nabstract class AbstractLogger implements Logger {\n protected constructor(\n private readonly name: string,\n protected readonly manager: LoggingManager,\n private readonly contextData?: Record<string, unknown>\n ) {}\n\n /**\n * Creates a new logger with the specified name.\n * Replaces the current logger's name (not hierarchical).\n */\n named(name: string): Logger {\n return new NamedLogger(name, this.manager, this.contextData);\n }\n\n /**\n * Creates a new logger with additional context.\n * Context is merged into every log entry's context field.\n * If this logger already has context, both contexts are merged.\n * Returns a new logger instance (immutable operation).\n */\n withContext(context: Record<string, unknown>): Logger {\n const mergedContext = this.contextData\n ? { ...this.contextData, ...context }\n : context;\n return new NamedLogger(this.name, this.manager, mergedContext);\n }\n\n trace(message: string, ...args: unknown[]): void {\n this.log(LogLevel.TRACE, message, args);\n }\n\n debug(message: string, ...args: unknown[]): void {\n this.log(LogLevel.DEBUG, message, args);\n }\n\n info(message: string, ...args: unknown[]): void {\n this.log(LogLevel.INFO, message, args);\n }\n\n warn(message: string, ...args: unknown[]): void {\n this.log(LogLevel.WARN, message, args);\n }\n\n error(message: string, ...args: unknown[]): void {\n this.log(LogLevel.ERROR, message, args);\n }\n\n fatal(message: string, ...args: unknown[]): void {\n this.log(LogLevel.FATAL, message, args);\n }\n\n private log(level: LogLevel, message: string, args: unknown[]): void {\n // Pass logger name to support per-logger level overrides\n if (!this.manager.shouldLog(level, this.name)) return;\n\n const timestamp = new Date().toISOString();\n\n // Format args as context\n let argsContext = args.length > 0\n ? (args.length === 1 ? formatArg(args[0]) : args.map(formatArg))\n : undefined;\n\n // Merge with contextData if present\n let context: unknown;\n if (this.contextData && argsContext !== undefined) {\n // Both contextData and args exist - merge them\n context = { ...this.contextData, args: argsContext };\n } else if (this.contextData) {\n // Only contextData exists\n context = this.contextData;\n } else {\n // Only args exist (or neither)\n context = argsContext;\n }\n\n this.manager.log({\n timestamp,\n level: logLevelName(level),\n logger: this.name,\n message,\n context,\n });\n }\n}\n\n/**\n * Public-facing logger class with a specific name.\n * Use getLogger() factory to create instances.\n */\nexport class NamedLogger extends AbstractLogger {\n constructor(\n name: string,\n manager: LoggingManager,\n contextData?: Record<string, unknown>\n ) {\n super(name, manager, contextData);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var log_level_exports = {};
20
+ __export(log_level_exports, {
21
+ LogLevel: () => LogLevel,
22
+ logLevelName: () => logLevelName,
23
+ parseLogLevel: () => parseLogLevel
24
+ });
25
+ module.exports = __toCommonJS(log_level_exports);
26
+ var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
27
+ LogLevel2[LogLevel2["TRACE"] = 0] = "TRACE";
28
+ LogLevel2[LogLevel2["DEBUG"] = 1] = "DEBUG";
29
+ LogLevel2[LogLevel2["INFO"] = 2] = "INFO";
30
+ LogLevel2[LogLevel2["WARN"] = 3] = "WARN";
31
+ LogLevel2[LogLevel2["ERROR"] = 4] = "ERROR";
32
+ LogLevel2[LogLevel2["FATAL"] = 5] = "FATAL";
33
+ return LogLevel2;
34
+ })(LogLevel || {});
35
+ const LEVEL_BY_NAME = {
36
+ trace: 0 /* TRACE */,
37
+ debug: 1 /* DEBUG */,
38
+ info: 2 /* INFO */,
39
+ warn: 3 /* WARN */,
40
+ error: 4 /* ERROR */,
41
+ fatal: 5 /* FATAL */
42
+ };
43
+ function parseLogLevel(value) {
44
+ if (!value) return 2 /* INFO */;
45
+ const normalized = value.trim().toLowerCase();
46
+ const byName = LEVEL_BY_NAME[normalized];
47
+ if (typeof byName === "number") return byName;
48
+ const asNumber = Number(normalized);
49
+ if (Number.isFinite(asNumber) && asNumber >= 0 && asNumber <= 5) {
50
+ return asNumber;
51
+ }
52
+ return 2 /* INFO */;
53
+ }
54
+ function logLevelName(level) {
55
+ switch (level) {
56
+ case 0 /* TRACE */:
57
+ return "TRACE";
58
+ case 1 /* DEBUG */:
59
+ return "DEBUG";
60
+ case 2 /* INFO */:
61
+ return "INFO";
62
+ case 3 /* WARN */:
63
+ return "WARN";
64
+ case 4 /* ERROR */:
65
+ return "ERROR";
66
+ case 5 /* FATAL */:
67
+ return "FATAL";
68
+ default:
69
+ return "INFO";
70
+ }
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ LogLevel,
75
+ logLevelName,
76
+ parseLogLevel
77
+ });
78
+ //# sourceMappingURL=log_level.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/log_level.ts"],"sourcesContent":["export enum LogLevel {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n FATAL = 5,\n}\n\nconst LEVEL_BY_NAME: Record<string, LogLevel> = {\n trace: LogLevel.TRACE,\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n fatal: LogLevel.FATAL,\n};\n\nexport function parseLogLevel(value: string | undefined | null): LogLevel {\n if (!value) return LogLevel.INFO;\n\n const normalized = value.trim().toLowerCase();\n const byName = LEVEL_BY_NAME[normalized];\n if (typeof byName === \"number\") return byName;\n\n const asNumber = Number(normalized);\n if (Number.isFinite(asNumber) && asNumber >= 0 && asNumber <= 5) {\n return asNumber as LogLevel;\n }\n\n return LogLevel.INFO;\n}\n\nexport function logLevelName(level: LogLevel): string {\n switch (level) {\n case LogLevel.TRACE:\n return \"TRACE\";\n case LogLevel.DEBUG:\n return \"DEBUG\";\n case LogLevel.INFO:\n return \"INFO\";\n case LogLevel.WARN:\n return \"WARN\";\n case LogLevel.ERROR:\n return \"ERROR\";\n case LogLevel.FATAL:\n return \"FATAL\";\n default:\n return \"INFO\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAK,WAAL,kBAAKA,cAAL;AACL,EAAAA,oBAAA,WAAQ,KAAR;AACA,EAAAA,oBAAA,WAAQ,KAAR;AACA,EAAAA,oBAAA,UAAO,KAAP;AACA,EAAAA,oBAAA,UAAO,KAAP;AACA,EAAAA,oBAAA,WAAQ,KAAR;AACA,EAAAA,oBAAA,WAAQ,KAAR;AANU,SAAAA;AAAA,GAAA;AASZ,MAAM,gBAA0C;AAAA,EAC9C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEO,SAAS,cAAc,OAA4C;AACxE,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,QAAM,SAAS,cAAc,UAAU;AACvC,MAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,QAAM,WAAW,OAAO,UAAU;AAClC,MAAI,OAAO,SAAS,QAAQ,KAAK,YAAY,KAAK,YAAY,GAAG;AAC/D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,aAAa,OAAyB;AACpD,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;","names":["LogLevel"]}
@@ -0,0 +1,12 @@
1
+ declare enum LogLevel {
2
+ TRACE = 0,
3
+ DEBUG = 1,
4
+ INFO = 2,
5
+ WARN = 3,
6
+ ERROR = 4,
7
+ FATAL = 5
8
+ }
9
+ declare function parseLogLevel(value: string | undefined | null): LogLevel;
10
+ declare function logLevelName(level: LogLevel): string;
11
+
12
+ export { LogLevel, logLevelName, parseLogLevel };
@@ -0,0 +1,12 @@
1
+ declare enum LogLevel {
2
+ TRACE = 0,
3
+ DEBUG = 1,
4
+ INFO = 2,
5
+ WARN = 3,
6
+ ERROR = 4,
7
+ FATAL = 5
8
+ }
9
+ declare function parseLogLevel(value: string | undefined | null): LogLevel;
10
+ declare function logLevelName(level: LogLevel): string;
11
+
12
+ export { LogLevel, logLevelName, parseLogLevel };
@@ -0,0 +1,52 @@
1
+ var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
2
+ LogLevel2[LogLevel2["TRACE"] = 0] = "TRACE";
3
+ LogLevel2[LogLevel2["DEBUG"] = 1] = "DEBUG";
4
+ LogLevel2[LogLevel2["INFO"] = 2] = "INFO";
5
+ LogLevel2[LogLevel2["WARN"] = 3] = "WARN";
6
+ LogLevel2[LogLevel2["ERROR"] = 4] = "ERROR";
7
+ LogLevel2[LogLevel2["FATAL"] = 5] = "FATAL";
8
+ return LogLevel2;
9
+ })(LogLevel || {});
10
+ const LEVEL_BY_NAME = {
11
+ trace: 0 /* TRACE */,
12
+ debug: 1 /* DEBUG */,
13
+ info: 2 /* INFO */,
14
+ warn: 3 /* WARN */,
15
+ error: 4 /* ERROR */,
16
+ fatal: 5 /* FATAL */
17
+ };
18
+ function parseLogLevel(value) {
19
+ if (!value) return 2 /* INFO */;
20
+ const normalized = value.trim().toLowerCase();
21
+ const byName = LEVEL_BY_NAME[normalized];
22
+ if (typeof byName === "number") return byName;
23
+ const asNumber = Number(normalized);
24
+ if (Number.isFinite(asNumber) && asNumber >= 0 && asNumber <= 5) {
25
+ return asNumber;
26
+ }
27
+ return 2 /* INFO */;
28
+ }
29
+ function logLevelName(level) {
30
+ switch (level) {
31
+ case 0 /* TRACE */:
32
+ return "TRACE";
33
+ case 1 /* DEBUG */:
34
+ return "DEBUG";
35
+ case 2 /* INFO */:
36
+ return "INFO";
37
+ case 3 /* WARN */:
38
+ return "WARN";
39
+ case 4 /* ERROR */:
40
+ return "ERROR";
41
+ case 5 /* FATAL */:
42
+ return "FATAL";
43
+ default:
44
+ return "INFO";
45
+ }
46
+ }
47
+ export {
48
+ LogLevel,
49
+ logLevelName,
50
+ parseLogLevel
51
+ };
52
+ //# sourceMappingURL=log_level.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/log_level.ts"],"sourcesContent":["export enum LogLevel {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n FATAL = 5,\n}\n\nconst LEVEL_BY_NAME: Record<string, LogLevel> = {\n trace: LogLevel.TRACE,\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n fatal: LogLevel.FATAL,\n};\n\nexport function parseLogLevel(value: string | undefined | null): LogLevel {\n if (!value) return LogLevel.INFO;\n\n const normalized = value.trim().toLowerCase();\n const byName = LEVEL_BY_NAME[normalized];\n if (typeof byName === \"number\") return byName;\n\n const asNumber = Number(normalized);\n if (Number.isFinite(asNumber) && asNumber >= 0 && asNumber <= 5) {\n return asNumber as LogLevel;\n }\n\n return LogLevel.INFO;\n}\n\nexport function logLevelName(level: LogLevel): string {\n switch (level) {\n case LogLevel.TRACE:\n return \"TRACE\";\n case LogLevel.DEBUG:\n return \"DEBUG\";\n case LogLevel.INFO:\n return \"INFO\";\n case LogLevel.WARN:\n return \"WARN\";\n case LogLevel.ERROR:\n return \"ERROR\";\n case LogLevel.FATAL:\n return \"FATAL\";\n default:\n return \"INFO\";\n }\n}\n"],"mappings":"AAAO,IAAK,WAAL,kBAAKA,cAAL;AACL,EAAAA,oBAAA,WAAQ,KAAR;AACA,EAAAA,oBAAA,WAAQ,KAAR;AACA,EAAAA,oBAAA,UAAO,KAAP;AACA,EAAAA,oBAAA,UAAO,KAAP;AACA,EAAAA,oBAAA,WAAQ,KAAR;AACA,EAAAA,oBAAA,WAAQ,KAAR;AANU,SAAAA;AAAA,GAAA;AASZ,MAAM,gBAA0C;AAAA,EAC9C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEO,SAAS,cAAc,OAA4C;AACxE,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,QAAM,SAAS,cAAc,UAAU;AACvC,MAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,QAAM,WAAW,OAAO,UAAU;AAClC,MAAI,OAAO,SAAS,QAAQ,KAAK,YAAY,KAAK,YAAY,GAAG;AAC/D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,aAAa,OAAyB;AACpD,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;","names":["LogLevel"]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var log_transport_exports = {};
16
+ module.exports = __toCommonJS(log_transport_exports);
17
+ //# sourceMappingURL=log_transport.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/log_transport.ts"],"sourcesContent":["export interface LogEntry {\n timestamp: string;\n level: string;\n logger: string;\n message: string;\n context?: unknown;\n environment: string;\n service: string;\n}\n\nexport interface LogTransport {\n log(entry: LogEntry): Promise<void> | void;\n close?(): Promise<void> | void;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}