@noego/logger 0.0.1 → 0.0.3

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.
@@ -107,8 +107,12 @@ class AbstractLogger {
107
107
  fatal(message, ...args) {
108
108
  this.log(import_log_level.LogLevel.FATAL, message, args);
109
109
  }
110
+ logAt(level, message, ...args) {
111
+ this.log(level, message, args);
112
+ }
110
113
  log(level, message, args) {
111
- if (!this.manager.shouldLog(level, this.name)) return;
114
+ const parsedLevel = (0, import_log_level.parseLogLevel)(level);
115
+ if (!this.manager.shouldLog(parsedLevel, this.name)) return;
112
116
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
113
117
  let argsContext = args.length > 0 ? args.length === 1 ? formatArg(args[0]) : args.map(formatArg) : void 0;
114
118
  let context;
@@ -121,7 +125,7 @@ class AbstractLogger {
121
125
  }
122
126
  this.manager.log({
123
127
  timestamp,
124
- level: (0, import_log_level.logLevelName)(level),
128
+ level: (0, import_log_level.logLevelName)(parsedLevel),
125
129
  logger: this.name,
126
130
  message,
127
131
  context
@@ -1 +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":[]}
1
+ {"version":3,"sources":["../../src/core/abstract_logger.ts"],"sourcesContent":["import { LogLevel, type LogLevelInput, logLevelName, parseLogLevel } 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 logAt(level: LogLevelInput, 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 logAt(level: LogLevelInput, message: string, ...args: unknown[]): void {\n this.log(level, message, args);\n }\n\n private log(level: LogLevelInput, message: string, args: unknown[]): void {\n const parsedLevel = parseLogLevel(level);\n\n // Pass logger name to support per-logger level overrides\n if (!this.manager.shouldLog(parsedLevel, 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(parsedLevel),\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":[]}
@@ -1,5 +1,5 @@
1
+ import { LogLevelInput } from './log_level.cjs';
1
2
  import { LoggingManager } from './logging_manager.cjs';
2
- import './log_level.cjs';
3
3
  import './log_transport.cjs';
4
4
 
5
5
  /**
@@ -14,6 +14,7 @@ interface Logger {
14
14
  warn(message: string, ...args: unknown[]): void;
15
15
  error(message: string, ...args: unknown[]): void;
16
16
  fatal(message: string, ...args: unknown[]): void;
17
+ logAt(level: LogLevelInput, message: string, ...args: unknown[]): void;
17
18
  }
18
19
  /**
19
20
  * Base logger class providing logging functionality.
@@ -42,6 +43,7 @@ declare abstract class AbstractLogger implements Logger {
42
43
  warn(message: string, ...args: unknown[]): void;
43
44
  error(message: string, ...args: unknown[]): void;
44
45
  fatal(message: string, ...args: unknown[]): void;
46
+ logAt(level: LogLevelInput, message: string, ...args: unknown[]): void;
45
47
  private log;
46
48
  }
47
49
  /**
@@ -1,5 +1,5 @@
1
+ import { LogLevelInput } from './log_level.js';
1
2
  import { LoggingManager } from './logging_manager.js';
2
- import './log_level.js';
3
3
  import './log_transport.js';
4
4
 
5
5
  /**
@@ -14,6 +14,7 @@ interface Logger {
14
14
  warn(message: string, ...args: unknown[]): void;
15
15
  error(message: string, ...args: unknown[]): void;
16
16
  fatal(message: string, ...args: unknown[]): void;
17
+ logAt(level: LogLevelInput, message: string, ...args: unknown[]): void;
17
18
  }
18
19
  /**
19
20
  * Base logger class providing logging functionality.
@@ -42,6 +43,7 @@ declare abstract class AbstractLogger implements Logger {
42
43
  warn(message: string, ...args: unknown[]): void;
43
44
  error(message: string, ...args: unknown[]): void;
44
45
  fatal(message: string, ...args: unknown[]): void;
46
+ logAt(level: LogLevelInput, message: string, ...args: unknown[]): void;
45
47
  private log;
46
48
  }
47
49
  /**
@@ -1,4 +1,4 @@
1
- import { LogLevel, logLevelName } from "./log_level.js";
1
+ import { LogLevel, logLevelName, parseLogLevel } from "./log_level.js";
2
2
  function safeJsonStringify(value) {
3
3
  const seen = /* @__PURE__ */ new WeakSet();
4
4
  try {
@@ -84,8 +84,12 @@ class AbstractLogger {
84
84
  fatal(message, ...args) {
85
85
  this.log(LogLevel.FATAL, message, args);
86
86
  }
87
+ logAt(level, message, ...args) {
88
+ this.log(level, message, args);
89
+ }
87
90
  log(level, message, args) {
88
- if (!this.manager.shouldLog(level, this.name)) return;
91
+ const parsedLevel = parseLogLevel(level);
92
+ if (!this.manager.shouldLog(parsedLevel, this.name)) return;
89
93
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
90
94
  let argsContext = args.length > 0 ? args.length === 1 ? formatArg(args[0]) : args.map(formatArg) : void 0;
91
95
  let context;
@@ -98,7 +102,7 @@ class AbstractLogger {
98
102
  }
99
103
  this.manager.log({
100
104
  timestamp,
101
- level: logLevelName(level),
105
+ level: logLevelName(parsedLevel),
102
106
  logger: this.name,
103
107
  message,
104
108
  context
@@ -1 +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":[]}
1
+ {"version":3,"sources":["../../src/core/abstract_logger.ts"],"sourcesContent":["import { LogLevel, type LogLevelInput, logLevelName, parseLogLevel } 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 logAt(level: LogLevelInput, 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 logAt(level: LogLevelInput, message: string, ...args: unknown[]): void {\n this.log(level, message, args);\n }\n\n private log(level: LogLevelInput, message: string, args: unknown[]): void {\n const parsedLevel = parseLogLevel(level);\n\n // Pass logger name to support per-logger level overrides\n if (!this.manager.shouldLog(parsedLevel, 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(parsedLevel),\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":[]}
@@ -20,59 +20,77 @@ var log_level_exports = {};
20
20
  __export(log_level_exports, {
21
21
  LogLevel: () => LogLevel,
22
22
  logLevelName: () => logLevelName,
23
- parseLogLevel: () => parseLogLevel
23
+ parseLogLevel: () => parseLogLevel,
24
+ registerLogLevel: () => registerLogLevel,
25
+ registerLogLevels: () => registerLogLevels
24
26
  });
25
27
  module.exports = __toCommonJS(log_level_exports);
26
28
  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";
29
+ LogLevel2[LogLevel2["TRACE"] = 1e3] = "TRACE";
30
+ LogLevel2[LogLevel2["DEBUG"] = 2e3] = "DEBUG";
31
+ LogLevel2[LogLevel2["INFO"] = 3e3] = "INFO";
32
+ LogLevel2[LogLevel2["WARN"] = 4e3] = "WARN";
33
+ LogLevel2[LogLevel2["ERROR"] = 5e3] = "ERROR";
34
+ LogLevel2[LogLevel2["FATAL"] = 6e3] = "FATAL";
33
35
  return LogLevel2;
34
36
  })(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
- };
37
+ const DEFAULT_LEVELS = [
38
+ { name: "trace", value: 1e3 /* TRACE */ },
39
+ { name: "debug", value: 2e3 /* DEBUG */ },
40
+ { name: "info", value: 3e3 /* INFO */ },
41
+ { name: "warn", value: 4e3 /* WARN */ },
42
+ { name: "error", value: 5e3 /* ERROR */ },
43
+ { name: "fatal", value: 6e3 /* FATAL */ }
44
+ ];
45
+ const LEVEL_BY_NAME = /* @__PURE__ */ new Map();
46
+ const NAME_BY_LEVEL = /* @__PURE__ */ new Map();
47
+ for (const definition of DEFAULT_LEVELS) {
48
+ registerLogLevel(definition);
49
+ }
50
+ function registerLogLevel(definition) {
51
+ const normalizedName = normalizeLevelName(definition.name);
52
+ if (!normalizedName || !isValidLevelValue(definition.value)) {
53
+ return;
54
+ }
55
+ LEVEL_BY_NAME.set(normalizedName, definition.value);
56
+ NAME_BY_LEVEL.set(definition.value, normalizedName.toUpperCase());
57
+ }
58
+ function registerLogLevels(definitions) {
59
+ for (const definition of definitions) {
60
+ registerLogLevel(definition);
61
+ }
62
+ }
43
63
  function parseLogLevel(value) {
44
- if (!value) return 2 /* INFO */;
45
- const normalized = value.trim().toLowerCase();
46
- const byName = LEVEL_BY_NAME[normalized];
64
+ if (typeof value === "number") {
65
+ return isValidLevelValue(value) ? value : 3e3 /* INFO */;
66
+ }
67
+ if (!value) return 3e3 /* INFO */;
68
+ const normalized = normalizeLevelName(value);
69
+ if (!normalized) return 3e3 /* INFO */;
70
+ const byName = LEVEL_BY_NAME.get(normalized);
47
71
  if (typeof byName === "number") return byName;
48
72
  const asNumber = Number(normalized);
49
- if (Number.isFinite(asNumber) && asNumber >= 0 && asNumber <= 5) {
73
+ if (isValidLevelValue(asNumber)) {
50
74
  return asNumber;
51
75
  }
52
- return 2 /* INFO */;
76
+ return 3e3 /* INFO */;
53
77
  }
54
78
  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
- }
79
+ const parsedLevel = parseLogLevel(level);
80
+ return NAME_BY_LEVEL.get(parsedLevel) ?? `LEVEL_${parsedLevel}`;
81
+ }
82
+ function normalizeLevelName(name) {
83
+ return name.trim().toLowerCase();
84
+ }
85
+ function isValidLevelValue(value) {
86
+ return Number.isFinite(value) && value >= 0;
71
87
  }
72
88
  // Annotate the CommonJS export names for ESM import in node:
73
89
  0 && (module.exports = {
74
90
  LogLevel,
75
91
  logLevelName,
76
- parseLogLevel
92
+ parseLogLevel,
93
+ registerLogLevel,
94
+ registerLogLevels
77
95
  });
78
96
  //# sourceMappingURL=log_level.cjs.map
@@ -1 +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"]}
1
+ {"version":3,"sources":["../../src/core/log_level.ts"],"sourcesContent":["export enum LogLevel {\n TRACE = 1000,\n DEBUG = 2000,\n INFO = 3000,\n WARN = 4000,\n ERROR = 5000,\n FATAL = 6000,\n}\n\nexport type LogLevelValue = number;\nexport type LogLevelInput = LogLevelValue | string | undefined | null;\n\nexport interface LogLevelDefinition {\n name: string;\n value: LogLevelValue;\n}\n\nconst DEFAULT_LEVELS: LogLevelDefinition[] = [\n { name: \"trace\", value: LogLevel.TRACE },\n { name: \"debug\", value: LogLevel.DEBUG },\n { name: \"info\", value: LogLevel.INFO },\n { name: \"warn\", value: LogLevel.WARN },\n { name: \"error\", value: LogLevel.ERROR },\n { name: \"fatal\", value: LogLevel.FATAL },\n];\n\nconst LEVEL_BY_NAME = new Map<string, LogLevelValue>();\nconst NAME_BY_LEVEL = new Map<LogLevelValue, string>();\n\nfor (const definition of DEFAULT_LEVELS) {\n registerLogLevel(definition);\n}\n\nexport function registerLogLevel(definition: LogLevelDefinition): void {\n const normalizedName = normalizeLevelName(definition.name);\n if (!normalizedName || !isValidLevelValue(definition.value)) {\n return;\n }\n\n LEVEL_BY_NAME.set(normalizedName, definition.value);\n NAME_BY_LEVEL.set(definition.value, normalizedName.toUpperCase());\n}\n\nexport function registerLogLevels(definitions: LogLevelDefinition[]): void {\n for (const definition of definitions) {\n registerLogLevel(definition);\n }\n}\n\nexport function parseLogLevel(value: LogLevelInput): LogLevelValue {\n if (typeof value === \"number\") {\n return isValidLevelValue(value) ? value : LogLevel.INFO;\n }\n\n if (!value) return LogLevel.INFO;\n\n const normalized = normalizeLevelName(value);\n if (!normalized) return LogLevel.INFO;\n\n const byName = LEVEL_BY_NAME.get(normalized);\n if (typeof byName === \"number\") return byName;\n\n const asNumber = Number(normalized);\n if (isValidLevelValue(asNumber)) {\n return asNumber;\n }\n\n return LogLevel.INFO;\n}\n\nexport function logLevelName(level: LogLevelInput): string {\n const parsedLevel = parseLogLevel(level);\n return NAME_BY_LEVEL.get(parsedLevel) ?? `LEVEL_${parsedLevel}`;\n}\n\nfunction normalizeLevelName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nfunction isValidLevelValue(value: number): boolean {\n return Number.isFinite(value) && value >= 0;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAK,WAAL,kBAAKA,cAAL;AACL,EAAAA,oBAAA,WAAQ,OAAR;AACA,EAAAA,oBAAA,WAAQ,OAAR;AACA,EAAAA,oBAAA,UAAO,OAAP;AACA,EAAAA,oBAAA,UAAO,OAAP;AACA,EAAAA,oBAAA,WAAQ,OAAR;AACA,EAAAA,oBAAA,WAAQ,OAAR;AANU,SAAAA;AAAA,GAAA;AAiBZ,MAAM,iBAAuC;AAAA,EAC3C,EAAE,MAAM,SAAS,OAAO,gBAAe;AAAA,EACvC,EAAE,MAAM,SAAS,OAAO,gBAAe;AAAA,EACvC,EAAE,MAAM,QAAQ,OAAO,eAAc;AAAA,EACrC,EAAE,MAAM,QAAQ,OAAO,eAAc;AAAA,EACrC,EAAE,MAAM,SAAS,OAAO,gBAAe;AAAA,EACvC,EAAE,MAAM,SAAS,OAAO,gBAAe;AACzC;AAEA,MAAM,gBAAgB,oBAAI,IAA2B;AACrD,MAAM,gBAAgB,oBAAI,IAA2B;AAErD,WAAW,cAAc,gBAAgB;AACvC,mBAAiB,UAAU;AAC7B;AAEO,SAAS,iBAAiB,YAAsC;AACrE,QAAM,iBAAiB,mBAAmB,WAAW,IAAI;AACzD,MAAI,CAAC,kBAAkB,CAAC,kBAAkB,WAAW,KAAK,GAAG;AAC3D;AAAA,EACF;AAEA,gBAAc,IAAI,gBAAgB,WAAW,KAAK;AAClD,gBAAc,IAAI,WAAW,OAAO,eAAe,YAAY,CAAC;AAClE;AAEO,SAAS,kBAAkB,aAAyC;AACzE,aAAW,cAAc,aAAa;AACpC,qBAAiB,UAAU;AAAA,EAC7B;AACF;AAEO,SAAS,cAAc,OAAqC;AACjE,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,kBAAkB,KAAK,IAAI,QAAQ;AAAA,EAC5C;AAEA,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,aAAa,mBAAmB,KAAK;AAC3C,MAAI,CAAC,WAAY,QAAO;AAExB,QAAM,SAAS,cAAc,IAAI,UAAU;AAC3C,MAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,QAAM,WAAW,OAAO,UAAU;AAClC,MAAI,kBAAkB,QAAQ,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,aAAa,OAA8B;AACzD,QAAM,cAAc,cAAc,KAAK;AACvC,SAAO,cAAc,IAAI,WAAW,KAAK,SAAS,WAAW;AAC/D;AAEA,SAAS,mBAAmB,MAAsB;AAChD,SAAO,KAAK,KAAK,EAAE,YAAY;AACjC;AAEA,SAAS,kBAAkB,OAAwB;AACjD,SAAO,OAAO,SAAS,KAAK,KAAK,SAAS;AAC5C;","names":["LogLevel"]}
@@ -1,12 +1,20 @@
1
1
  declare enum LogLevel {
2
- TRACE = 0,
3
- DEBUG = 1,
4
- INFO = 2,
5
- WARN = 3,
6
- ERROR = 4,
7
- FATAL = 5
2
+ TRACE = 1000,
3
+ DEBUG = 2000,
4
+ INFO = 3000,
5
+ WARN = 4000,
6
+ ERROR = 5000,
7
+ FATAL = 6000
8
8
  }
9
- declare function parseLogLevel(value: string | undefined | null): LogLevel;
10
- declare function logLevelName(level: LogLevel): string;
9
+ type LogLevelValue = number;
10
+ type LogLevelInput = LogLevelValue | string | undefined | null;
11
+ interface LogLevelDefinition {
12
+ name: string;
13
+ value: LogLevelValue;
14
+ }
15
+ declare function registerLogLevel(definition: LogLevelDefinition): void;
16
+ declare function registerLogLevels(definitions: LogLevelDefinition[]): void;
17
+ declare function parseLogLevel(value: LogLevelInput): LogLevelValue;
18
+ declare function logLevelName(level: LogLevelInput): string;
11
19
 
12
- export { LogLevel, logLevelName, parseLogLevel };
20
+ export { LogLevel, type LogLevelDefinition, type LogLevelInput, type LogLevelValue, logLevelName, parseLogLevel, registerLogLevel, registerLogLevels };
@@ -1,12 +1,20 @@
1
1
  declare enum LogLevel {
2
- TRACE = 0,
3
- DEBUG = 1,
4
- INFO = 2,
5
- WARN = 3,
6
- ERROR = 4,
7
- FATAL = 5
2
+ TRACE = 1000,
3
+ DEBUG = 2000,
4
+ INFO = 3000,
5
+ WARN = 4000,
6
+ ERROR = 5000,
7
+ FATAL = 6000
8
8
  }
9
- declare function parseLogLevel(value: string | undefined | null): LogLevel;
10
- declare function logLevelName(level: LogLevel): string;
9
+ type LogLevelValue = number;
10
+ type LogLevelInput = LogLevelValue | string | undefined | null;
11
+ interface LogLevelDefinition {
12
+ name: string;
13
+ value: LogLevelValue;
14
+ }
15
+ declare function registerLogLevel(definition: LogLevelDefinition): void;
16
+ declare function registerLogLevels(definitions: LogLevelDefinition[]): void;
17
+ declare function parseLogLevel(value: LogLevelInput): LogLevelValue;
18
+ declare function logLevelName(level: LogLevelInput): string;
11
19
 
12
- export { LogLevel, logLevelName, parseLogLevel };
20
+ export { LogLevel, type LogLevelDefinition, type LogLevelInput, type LogLevelValue, logLevelName, parseLogLevel, registerLogLevel, registerLogLevels };
@@ -1,52 +1,68 @@
1
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";
2
+ LogLevel2[LogLevel2["TRACE"] = 1e3] = "TRACE";
3
+ LogLevel2[LogLevel2["DEBUG"] = 2e3] = "DEBUG";
4
+ LogLevel2[LogLevel2["INFO"] = 3e3] = "INFO";
5
+ LogLevel2[LogLevel2["WARN"] = 4e3] = "WARN";
6
+ LogLevel2[LogLevel2["ERROR"] = 5e3] = "ERROR";
7
+ LogLevel2[LogLevel2["FATAL"] = 6e3] = "FATAL";
8
8
  return LogLevel2;
9
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
- };
10
+ const DEFAULT_LEVELS = [
11
+ { name: "trace", value: 1e3 /* TRACE */ },
12
+ { name: "debug", value: 2e3 /* DEBUG */ },
13
+ { name: "info", value: 3e3 /* INFO */ },
14
+ { name: "warn", value: 4e3 /* WARN */ },
15
+ { name: "error", value: 5e3 /* ERROR */ },
16
+ { name: "fatal", value: 6e3 /* FATAL */ }
17
+ ];
18
+ const LEVEL_BY_NAME = /* @__PURE__ */ new Map();
19
+ const NAME_BY_LEVEL = /* @__PURE__ */ new Map();
20
+ for (const definition of DEFAULT_LEVELS) {
21
+ registerLogLevel(definition);
22
+ }
23
+ function registerLogLevel(definition) {
24
+ const normalizedName = normalizeLevelName(definition.name);
25
+ if (!normalizedName || !isValidLevelValue(definition.value)) {
26
+ return;
27
+ }
28
+ LEVEL_BY_NAME.set(normalizedName, definition.value);
29
+ NAME_BY_LEVEL.set(definition.value, normalizedName.toUpperCase());
30
+ }
31
+ function registerLogLevels(definitions) {
32
+ for (const definition of definitions) {
33
+ registerLogLevel(definition);
34
+ }
35
+ }
18
36
  function parseLogLevel(value) {
19
- if (!value) return 2 /* INFO */;
20
- const normalized = value.trim().toLowerCase();
21
- const byName = LEVEL_BY_NAME[normalized];
37
+ if (typeof value === "number") {
38
+ return isValidLevelValue(value) ? value : 3e3 /* INFO */;
39
+ }
40
+ if (!value) return 3e3 /* INFO */;
41
+ const normalized = normalizeLevelName(value);
42
+ if (!normalized) return 3e3 /* INFO */;
43
+ const byName = LEVEL_BY_NAME.get(normalized);
22
44
  if (typeof byName === "number") return byName;
23
45
  const asNumber = Number(normalized);
24
- if (Number.isFinite(asNumber) && asNumber >= 0 && asNumber <= 5) {
46
+ if (isValidLevelValue(asNumber)) {
25
47
  return asNumber;
26
48
  }
27
- return 2 /* INFO */;
49
+ return 3e3 /* INFO */;
28
50
  }
29
51
  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
- }
52
+ const parsedLevel = parseLogLevel(level);
53
+ return NAME_BY_LEVEL.get(parsedLevel) ?? `LEVEL_${parsedLevel}`;
54
+ }
55
+ function normalizeLevelName(name) {
56
+ return name.trim().toLowerCase();
57
+ }
58
+ function isValidLevelValue(value) {
59
+ return Number.isFinite(value) && value >= 0;
46
60
  }
47
61
  export {
48
62
  LogLevel,
49
63
  logLevelName,
50
- parseLogLevel
64
+ parseLogLevel,
65
+ registerLogLevel,
66
+ registerLogLevels
51
67
  };
52
68
  //# sourceMappingURL=log_level.js.map
@@ -1 +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"]}
1
+ {"version":3,"sources":["../../src/core/log_level.ts"],"sourcesContent":["export enum LogLevel {\n TRACE = 1000,\n DEBUG = 2000,\n INFO = 3000,\n WARN = 4000,\n ERROR = 5000,\n FATAL = 6000,\n}\n\nexport type LogLevelValue = number;\nexport type LogLevelInput = LogLevelValue | string | undefined | null;\n\nexport interface LogLevelDefinition {\n name: string;\n value: LogLevelValue;\n}\n\nconst DEFAULT_LEVELS: LogLevelDefinition[] = [\n { name: \"trace\", value: LogLevel.TRACE },\n { name: \"debug\", value: LogLevel.DEBUG },\n { name: \"info\", value: LogLevel.INFO },\n { name: \"warn\", value: LogLevel.WARN },\n { name: \"error\", value: LogLevel.ERROR },\n { name: \"fatal\", value: LogLevel.FATAL },\n];\n\nconst LEVEL_BY_NAME = new Map<string, LogLevelValue>();\nconst NAME_BY_LEVEL = new Map<LogLevelValue, string>();\n\nfor (const definition of DEFAULT_LEVELS) {\n registerLogLevel(definition);\n}\n\nexport function registerLogLevel(definition: LogLevelDefinition): void {\n const normalizedName = normalizeLevelName(definition.name);\n if (!normalizedName || !isValidLevelValue(definition.value)) {\n return;\n }\n\n LEVEL_BY_NAME.set(normalizedName, definition.value);\n NAME_BY_LEVEL.set(definition.value, normalizedName.toUpperCase());\n}\n\nexport function registerLogLevels(definitions: LogLevelDefinition[]): void {\n for (const definition of definitions) {\n registerLogLevel(definition);\n }\n}\n\nexport function parseLogLevel(value: LogLevelInput): LogLevelValue {\n if (typeof value === \"number\") {\n return isValidLevelValue(value) ? value : LogLevel.INFO;\n }\n\n if (!value) return LogLevel.INFO;\n\n const normalized = normalizeLevelName(value);\n if (!normalized) return LogLevel.INFO;\n\n const byName = LEVEL_BY_NAME.get(normalized);\n if (typeof byName === \"number\") return byName;\n\n const asNumber = Number(normalized);\n if (isValidLevelValue(asNumber)) {\n return asNumber;\n }\n\n return LogLevel.INFO;\n}\n\nexport function logLevelName(level: LogLevelInput): string {\n const parsedLevel = parseLogLevel(level);\n return NAME_BY_LEVEL.get(parsedLevel) ?? `LEVEL_${parsedLevel}`;\n}\n\nfunction normalizeLevelName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nfunction isValidLevelValue(value: number): boolean {\n return Number.isFinite(value) && value >= 0;\n}\n"],"mappings":"AAAO,IAAK,WAAL,kBAAKA,cAAL;AACL,EAAAA,oBAAA,WAAQ,OAAR;AACA,EAAAA,oBAAA,WAAQ,OAAR;AACA,EAAAA,oBAAA,UAAO,OAAP;AACA,EAAAA,oBAAA,UAAO,OAAP;AACA,EAAAA,oBAAA,WAAQ,OAAR;AACA,EAAAA,oBAAA,WAAQ,OAAR;AANU,SAAAA;AAAA,GAAA;AAiBZ,MAAM,iBAAuC;AAAA,EAC3C,EAAE,MAAM,SAAS,OAAO,gBAAe;AAAA,EACvC,EAAE,MAAM,SAAS,OAAO,gBAAe;AAAA,EACvC,EAAE,MAAM,QAAQ,OAAO,eAAc;AAAA,EACrC,EAAE,MAAM,QAAQ,OAAO,eAAc;AAAA,EACrC,EAAE,MAAM,SAAS,OAAO,gBAAe;AAAA,EACvC,EAAE,MAAM,SAAS,OAAO,gBAAe;AACzC;AAEA,MAAM,gBAAgB,oBAAI,IAA2B;AACrD,MAAM,gBAAgB,oBAAI,IAA2B;AAErD,WAAW,cAAc,gBAAgB;AACvC,mBAAiB,UAAU;AAC7B;AAEO,SAAS,iBAAiB,YAAsC;AACrE,QAAM,iBAAiB,mBAAmB,WAAW,IAAI;AACzD,MAAI,CAAC,kBAAkB,CAAC,kBAAkB,WAAW,KAAK,GAAG;AAC3D;AAAA,EACF;AAEA,gBAAc,IAAI,gBAAgB,WAAW,KAAK;AAClD,gBAAc,IAAI,WAAW,OAAO,eAAe,YAAY,CAAC;AAClE;AAEO,SAAS,kBAAkB,aAAyC;AACzE,aAAW,cAAc,aAAa;AACpC,qBAAiB,UAAU;AAAA,EAC7B;AACF;AAEO,SAAS,cAAc,OAAqC;AACjE,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,kBAAkB,KAAK,IAAI,QAAQ;AAAA,EAC5C;AAEA,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,aAAa,mBAAmB,KAAK;AAC3C,MAAI,CAAC,WAAY,QAAO;AAExB,QAAM,SAAS,cAAc,IAAI,UAAU;AAC3C,MAAI,OAAO,WAAW,SAAU,QAAO;AAEvC,QAAM,WAAW,OAAO,UAAU;AAClC,MAAI,kBAAkB,QAAQ,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,aAAa,OAA8B;AACzD,QAAM,cAAc,cAAc,KAAK;AACvC,SAAO,cAAc,IAAI,WAAW,KAAK,SAAS,WAAW;AAC/D;AAEA,SAAS,mBAAmB,MAAsB;AAChD,SAAO,KAAK,KAAK,EAAE,YAAY;AACjC;AAEA,SAAS,kBAAkB,OAAwB;AACjD,SAAO,OAAO,SAAS,KAAK,KAAK,SAAS;AAC5C;","names":["LogLevel"]}
@@ -42,19 +42,20 @@ class LoggingManager {
42
42
  return this.level;
43
43
  }
44
44
  setLevel(level) {
45
- this.level = level;
45
+ this.level = (0, import_log_level.parseLogLevel)(level);
46
46
  }
47
47
  setLoggerLevel(name, level) {
48
- this.loggerLevels.set(name, level);
48
+ this.loggerLevels.set(name, (0, import_log_level.parseLogLevel)(level));
49
49
  }
50
50
  shouldLog(level, loggerName) {
51
+ const parsedLevel = (0, import_log_level.parseLogLevel)(level);
51
52
  if (loggerName) {
52
53
  const loggerLevel = this.loggerLevels.get(loggerName);
53
54
  if (loggerLevel !== void 0) {
54
- return level >= loggerLevel;
55
+ return parsedLevel >= loggerLevel;
55
56
  }
56
57
  }
57
- return level >= this.level;
58
+ return parsedLevel >= this.level;
58
59
  }
59
60
  addTransport(transport) {
60
61
  this.transports.push(transport);
@@ -101,6 +102,9 @@ function getManager() {
101
102
  }
102
103
  function configureLogging(options) {
103
104
  const manager = getManager();
105
+ if (options.levels) {
106
+ (0, import_log_level.registerLogLevels)(options.levels);
107
+ }
104
108
  if (options.level !== void 0) {
105
109
  manager.setLevel(options.level);
106
110
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/logging_manager.ts"],"sourcesContent":["import { LogLevel, logLevelName, parseLogLevel } from \"./log_level.cjs\";\nimport type { LogEntry, LogTransport } from \"./log_transport.cjs\";\nimport { ConsoleTransport } from \"../transports/console_transport.cjs\";\n\nconst MANAGER_SYMBOL = Symbol.for(\"@noego/logger\");\n\ninterface GlobalWithManager {\n [MANAGER_SYMBOL]?: LoggingManager;\n}\n\nexport interface ConfigureLoggingOptions {\n level?: LogLevel;\n loggers?: Record<string, LogLevel>;\n transports?: LogTransport[];\n serviceName?: string;\n}\n\nexport class LoggingManager {\n private level: LogLevel;\n private transports: LogTransport[] = [];\n private service: string;\n private readonly environment: string;\n private loggerLevels: Map<string, LogLevel> = new Map();\n\n constructor() {\n const logLevelEnv =\n typeof process !== \"undefined\" ? process.env?.LOG_LEVEL : undefined;\n const serviceNameEnv =\n typeof process !== \"undefined\" ? process.env?.SERVICE_NAME : undefined;\n const nodeEnv =\n typeof process !== \"undefined\" ? process.env?.NODE_ENV : undefined;\n\n this.level = parseLogLevel(logLevelEnv);\n this.service = serviceNameEnv ?? \"noego\";\n this.environment = nodeEnv ?? \"development\";\n }\n\n getLevel(): LogLevel {\n return this.level;\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n setLoggerLevel(name: string, level: LogLevel): void {\n this.loggerLevels.set(name, level);\n }\n\n shouldLog(level: LogLevel, loggerName?: string): boolean {\n if (loggerName) {\n const loggerLevel = this.loggerLevels.get(loggerName);\n if (loggerLevel !== undefined) {\n return level >= loggerLevel;\n }\n }\n return level >= this.level;\n }\n\n addTransport(transport: LogTransport): void {\n this.transports.push(transport);\n }\n\n setTransports(transports: LogTransport[]): void {\n this.transports = [...transports];\n }\n\n clearTransports(): void {\n this.transports = [];\n }\n\n setServiceName(name: string): void {\n this.service = name;\n }\n\n log(entry: Omit<LogEntry, \"environment\" | \"service\">): void {\n const fullEntry: LogEntry = {\n ...entry,\n environment: this.environment,\n service: this.service,\n };\n\n for (const transport of this.transports) {\n transport.log(fullEntry);\n }\n }\n\n async closeAll(): Promise<void> {\n for (const transport of this.transports) {\n if (transport.close) {\n await transport.close();\n }\n }\n }\n\n formatMessage(level: LogLevel, name: string, message: string): string {\n const timestamp = new Date().toISOString();\n return `[${timestamp}] [${name}] [${logLevelName(level)}] ${message}`;\n }\n}\n\n/**\n * Gets the global LoggingManager singleton instance.\n * Creates one with a default ConsoleTransport if it doesn't exist.\n */\nexport function getManager(): LoggingManager {\n const global = globalThis as GlobalWithManager;\n\n if (!global[MANAGER_SYMBOL]) {\n const manager = new LoggingManager();\n\n // Add default ConsoleTransport\n manager.addTransport(new ConsoleTransport());\n\n global[MANAGER_SYMBOL] = manager;\n }\n\n return global[MANAGER_SYMBOL];\n}\n\n/**\n * Configures the global LoggingManager instance.\n * This mutates the singleton instance returned by getManager().\n */\nexport function configureLogging(options: ConfigureLoggingOptions): void {\n const manager = getManager();\n\n if (options.level !== undefined) {\n manager.setLevel(options.level);\n }\n\n if (options.loggers) {\n for (const [name, level] of Object.entries(options.loggers)) {\n manager.setLoggerLevel(name, level);\n }\n }\n\n if (options.transports) {\n // Clear existing transports and add new ones\n manager.setTransports(options.transports);\n }\n\n if (options.serviceName) {\n // Update service name\n manager.setServiceName(options.serviceName);\n }\n}\n\n/**\n * Shuts down the global LoggingManager by closing all transports.\n */\nexport async function shutdown(): Promise<void> {\n const manager = getManager();\n await manager.closeAll();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAsD;AAEtD,+BAAiC;AAEjC,MAAM,iBAAiB,uBAAO,IAAI,eAAe;AAa1C,MAAM,eAAe;AAAA,EAO1B,cAAc;AALd,SAAQ,aAA6B,CAAC;AAGtC,SAAQ,eAAsC,oBAAI,IAAI;AAGpD,UAAM,cACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,YAAY;AAC5D,UAAM,iBACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,eAAe;AAC/D,UAAM,UACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,WAAW;AAE3D,SAAK,YAAQ,gCAAc,WAAW;AACtC,SAAK,UAAU,kBAAkB;AACjC,SAAK,cAAc,WAAW;AAAA,EAChC;AAAA,EAEA,WAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS,OAAuB;AAC9B,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,eAAe,MAAc,OAAuB;AAClD,SAAK,aAAa,IAAI,MAAM,KAAK;AAAA,EACnC;AAAA,EAEA,UAAU,OAAiB,YAA8B;AACvD,QAAI,YAAY;AACd,YAAM,cAAc,KAAK,aAAa,IAAI,UAAU;AACpD,UAAI,gBAAgB,QAAW;AAC7B,eAAO,SAAS;AAAA,MAClB;AAAA,IACF;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,aAAa,WAA+B;AAC1C,SAAK,WAAW,KAAK,SAAS;AAAA,EAChC;AAAA,EAEA,cAAc,YAAkC;AAC9C,SAAK,aAAa,CAAC,GAAG,UAAU;AAAA,EAClC;AAAA,EAEA,kBAAwB;AACtB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEA,eAAe,MAAoB;AACjC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,OAAwD;AAC1D,UAAM,YAAsB;AAAA,MAC1B,GAAG;AAAA,MACH,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK;AAAA,IAChB;AAEA,eAAW,aAAa,KAAK,YAAY;AACvC,gBAAU,IAAI,SAAS;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,WAA0B;AAC9B,eAAW,aAAa,KAAK,YAAY;AACvC,UAAI,UAAU,OAAO;AACnB,cAAM,UAAU,MAAM;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,OAAiB,MAAc,SAAyB;AACpE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,WAAO,IAAI,SAAS,MAAM,IAAI,UAAM,+BAAa,KAAK,CAAC,KAAK,OAAO;AAAA,EACrE;AACF;AAMO,SAAS,aAA6B;AAC3C,QAAM,SAAS;AAEf,MAAI,CAAC,OAAO,cAAc,GAAG;AAC3B,UAAM,UAAU,IAAI,eAAe;AAGnC,YAAQ,aAAa,IAAI,0CAAiB,CAAC;AAE3C,WAAO,cAAc,IAAI;AAAA,EAC3B;AAEA,SAAO,OAAO,cAAc;AAC9B;AAMO,SAAS,iBAAiB,SAAwC;AACvE,QAAM,UAAU,WAAW;AAE3B,MAAI,QAAQ,UAAU,QAAW;AAC/B,YAAQ,SAAS,QAAQ,KAAK;AAAA,EAChC;AAEA,MAAI,QAAQ,SAAS;AACnB,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,QAAQ,OAAO,GAAG;AAC3D,cAAQ,eAAe,MAAM,KAAK;AAAA,IACpC;AAAA,EACF;AAEA,MAAI,QAAQ,YAAY;AAEtB,YAAQ,cAAc,QAAQ,UAAU;AAAA,EAC1C;AAEA,MAAI,QAAQ,aAAa;AAEvB,YAAQ,eAAe,QAAQ,WAAW;AAAA,EAC5C;AACF;AAKA,eAAsB,WAA0B;AAC9C,QAAM,UAAU,WAAW;AAC3B,QAAM,QAAQ,SAAS;AACzB;","names":[]}
1
+ {"version":3,"sources":["../../src/core/logging_manager.ts"],"sourcesContent":["import { type LogLevelDefinition, type LogLevelInput, type LogLevelValue, logLevelName, parseLogLevel, registerLogLevels } from \"./log_level.cjs\";\nimport type { LogEntry, LogTransport } from \"./log_transport.cjs\";\nimport { ConsoleTransport } from \"../transports/console_transport.cjs\";\n\nconst MANAGER_SYMBOL = Symbol.for(\"@noego/logger\");\n\ninterface GlobalWithManager {\n [MANAGER_SYMBOL]?: LoggingManager;\n}\n\nexport interface ConfigureLoggingOptions {\n level?: LogLevelInput;\n loggers?: Record<string, LogLevelInput>;\n levels?: LogLevelDefinition[];\n transports?: LogTransport[];\n serviceName?: string;\n}\n\nexport class LoggingManager {\n private level: LogLevelValue;\n private transports: LogTransport[] = [];\n private service: string;\n private readonly environment: string;\n private loggerLevels: Map<string, LogLevelValue> = new Map();\n\n constructor() {\n const logLevelEnv =\n typeof process !== \"undefined\" ? process.env?.LOG_LEVEL : undefined;\n const serviceNameEnv =\n typeof process !== \"undefined\" ? process.env?.SERVICE_NAME : undefined;\n const nodeEnv =\n typeof process !== \"undefined\" ? process.env?.NODE_ENV : undefined;\n\n this.level = parseLogLevel(logLevelEnv);\n this.service = serviceNameEnv ?? \"noego\";\n this.environment = nodeEnv ?? \"development\";\n }\n\n getLevel(): LogLevelValue {\n return this.level;\n }\n\n setLevel(level: LogLevelInput): void {\n this.level = parseLogLevel(level);\n }\n\n setLoggerLevel(name: string, level: LogLevelInput): void {\n this.loggerLevels.set(name, parseLogLevel(level));\n }\n\n shouldLog(level: LogLevelInput, loggerName?: string): boolean {\n const parsedLevel = parseLogLevel(level);\n\n if (loggerName) {\n const loggerLevel = this.loggerLevels.get(loggerName);\n if (loggerLevel !== undefined) {\n return parsedLevel >= loggerLevel;\n }\n }\n return parsedLevel >= this.level;\n }\n\n addTransport(transport: LogTransport): void {\n this.transports.push(transport);\n }\n\n setTransports(transports: LogTransport[]): void {\n this.transports = [...transports];\n }\n\n clearTransports(): void {\n this.transports = [];\n }\n\n setServiceName(name: string): void {\n this.service = name;\n }\n\n log(entry: Omit<LogEntry, \"environment\" | \"service\">): void {\n const fullEntry: LogEntry = {\n ...entry,\n environment: this.environment,\n service: this.service,\n };\n\n for (const transport of this.transports) {\n transport.log(fullEntry);\n }\n }\n\n async closeAll(): Promise<void> {\n for (const transport of this.transports) {\n if (transport.close) {\n await transport.close();\n }\n }\n }\n\n formatMessage(level: LogLevelInput, name: string, message: string): string {\n const timestamp = new Date().toISOString();\n return `[${timestamp}] [${name}] [${logLevelName(level)}] ${message}`;\n }\n}\n\n/**\n * Gets the global LoggingManager singleton instance.\n * Creates one with a default ConsoleTransport if it doesn't exist.\n */\nexport function getManager(): LoggingManager {\n const global = globalThis as GlobalWithManager;\n\n if (!global[MANAGER_SYMBOL]) {\n const manager = new LoggingManager();\n\n // Add default ConsoleTransport\n manager.addTransport(new ConsoleTransport());\n\n global[MANAGER_SYMBOL] = manager;\n }\n\n return global[MANAGER_SYMBOL];\n}\n\n/**\n * Configures the global LoggingManager instance.\n * This mutates the singleton instance returned by getManager().\n */\nexport function configureLogging(options: ConfigureLoggingOptions): void {\n const manager = getManager();\n\n if (options.levels) {\n registerLogLevels(options.levels);\n }\n\n if (options.level !== undefined) {\n manager.setLevel(options.level);\n }\n\n if (options.loggers) {\n for (const [name, level] of Object.entries(options.loggers)) {\n manager.setLoggerLevel(name, level);\n }\n }\n\n if (options.transports) {\n // Clear existing transports and add new ones\n manager.setTransports(options.transports);\n }\n\n if (options.serviceName) {\n // Update service name\n manager.setServiceName(options.serviceName);\n }\n}\n\n/**\n * Shuts down the global LoggingManager by closing all transports.\n */\nexport async function shutdown(): Promise<void> {\n const manager = getManager();\n await manager.closeAll();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAgI;AAEhI,+BAAiC;AAEjC,MAAM,iBAAiB,uBAAO,IAAI,eAAe;AAc1C,MAAM,eAAe;AAAA,EAO1B,cAAc;AALd,SAAQ,aAA6B,CAAC;AAGtC,SAAQ,eAA2C,oBAAI,IAAI;AAGzD,UAAM,cACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,YAAY;AAC5D,UAAM,iBACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,eAAe;AAC/D,UAAM,UACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,WAAW;AAE3D,SAAK,YAAQ,gCAAc,WAAW;AACtC,SAAK,UAAU,kBAAkB;AACjC,SAAK,cAAc,WAAW;AAAA,EAChC;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS,OAA4B;AACnC,SAAK,YAAQ,gCAAc,KAAK;AAAA,EAClC;AAAA,EAEA,eAAe,MAAc,OAA4B;AACvD,SAAK,aAAa,IAAI,UAAM,gCAAc,KAAK,CAAC;AAAA,EAClD;AAAA,EAEA,UAAU,OAAsB,YAA8B;AAC5D,UAAM,kBAAc,gCAAc,KAAK;AAEvC,QAAI,YAAY;AACd,YAAM,cAAc,KAAK,aAAa,IAAI,UAAU;AACpD,UAAI,gBAAgB,QAAW;AAC7B,eAAO,eAAe;AAAA,MACxB;AAAA,IACF;AACA,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,aAAa,WAA+B;AAC1C,SAAK,WAAW,KAAK,SAAS;AAAA,EAChC;AAAA,EAEA,cAAc,YAAkC;AAC9C,SAAK,aAAa,CAAC,GAAG,UAAU;AAAA,EAClC;AAAA,EAEA,kBAAwB;AACtB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEA,eAAe,MAAoB;AACjC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,OAAwD;AAC1D,UAAM,YAAsB;AAAA,MAC1B,GAAG;AAAA,MACH,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK;AAAA,IAChB;AAEA,eAAW,aAAa,KAAK,YAAY;AACvC,gBAAU,IAAI,SAAS;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,WAA0B;AAC9B,eAAW,aAAa,KAAK,YAAY;AACvC,UAAI,UAAU,OAAO;AACnB,cAAM,UAAU,MAAM;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,OAAsB,MAAc,SAAyB;AACzE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,WAAO,IAAI,SAAS,MAAM,IAAI,UAAM,+BAAa,KAAK,CAAC,KAAK,OAAO;AAAA,EACrE;AACF;AAMO,SAAS,aAA6B;AAC3C,QAAM,SAAS;AAEf,MAAI,CAAC,OAAO,cAAc,GAAG;AAC3B,UAAM,UAAU,IAAI,eAAe;AAGnC,YAAQ,aAAa,IAAI,0CAAiB,CAAC;AAE3C,WAAO,cAAc,IAAI;AAAA,EAC3B;AAEA,SAAO,OAAO,cAAc;AAC9B;AAMO,SAAS,iBAAiB,SAAwC;AACvE,QAAM,UAAU,WAAW;AAE3B,MAAI,QAAQ,QAAQ;AAClB,4CAAkB,QAAQ,MAAM;AAAA,EAClC;AAEA,MAAI,QAAQ,UAAU,QAAW;AAC/B,YAAQ,SAAS,QAAQ,KAAK;AAAA,EAChC;AAEA,MAAI,QAAQ,SAAS;AACnB,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,QAAQ,OAAO,GAAG;AAC3D,cAAQ,eAAe,MAAM,KAAK;AAAA,IACpC;AAAA,EACF;AAEA,MAAI,QAAQ,YAAY;AAEtB,YAAQ,cAAc,QAAQ,UAAU;AAAA,EAC1C;AAEA,MAAI,QAAQ,aAAa;AAEvB,YAAQ,eAAe,QAAQ,WAAW;AAAA,EAC5C;AACF;AAKA,eAAsB,WAA0B;AAC9C,QAAM,UAAU,WAAW;AAC3B,QAAM,QAAQ,SAAS;AACzB;","names":[]}
@@ -1,9 +1,10 @@
1
- import { LogLevel } from './log_level.cjs';
1
+ import { LogLevelInput, LogLevelDefinition, LogLevelValue } from './log_level.cjs';
2
2
  import { LogTransport, LogEntry } from './log_transport.cjs';
3
3
 
4
4
  interface ConfigureLoggingOptions {
5
- level?: LogLevel;
6
- loggers?: Record<string, LogLevel>;
5
+ level?: LogLevelInput;
6
+ loggers?: Record<string, LogLevelInput>;
7
+ levels?: LogLevelDefinition[];
7
8
  transports?: LogTransport[];
8
9
  serviceName?: string;
9
10
  }
@@ -14,17 +15,17 @@ declare class LoggingManager {
14
15
  private readonly environment;
15
16
  private loggerLevels;
16
17
  constructor();
17
- getLevel(): LogLevel;
18
- setLevel(level: LogLevel): void;
19
- setLoggerLevel(name: string, level: LogLevel): void;
20
- shouldLog(level: LogLevel, loggerName?: string): boolean;
18
+ getLevel(): LogLevelValue;
19
+ setLevel(level: LogLevelInput): void;
20
+ setLoggerLevel(name: string, level: LogLevelInput): void;
21
+ shouldLog(level: LogLevelInput, loggerName?: string): boolean;
21
22
  addTransport(transport: LogTransport): void;
22
23
  setTransports(transports: LogTransport[]): void;
23
24
  clearTransports(): void;
24
25
  setServiceName(name: string): void;
25
26
  log(entry: Omit<LogEntry, "environment" | "service">): void;
26
27
  closeAll(): Promise<void>;
27
- formatMessage(level: LogLevel, name: string, message: string): string;
28
+ formatMessage(level: LogLevelInput, name: string, message: string): string;
28
29
  }
29
30
  /**
30
31
  * Gets the global LoggingManager singleton instance.
@@ -1,9 +1,10 @@
1
- import { LogLevel } from './log_level.js';
1
+ import { LogLevelInput, LogLevelDefinition, LogLevelValue } from './log_level.js';
2
2
  import { LogTransport, LogEntry } from './log_transport.js';
3
3
 
4
4
  interface ConfigureLoggingOptions {
5
- level?: LogLevel;
6
- loggers?: Record<string, LogLevel>;
5
+ level?: LogLevelInput;
6
+ loggers?: Record<string, LogLevelInput>;
7
+ levels?: LogLevelDefinition[];
7
8
  transports?: LogTransport[];
8
9
  serviceName?: string;
9
10
  }
@@ -14,17 +15,17 @@ declare class LoggingManager {
14
15
  private readonly environment;
15
16
  private loggerLevels;
16
17
  constructor();
17
- getLevel(): LogLevel;
18
- setLevel(level: LogLevel): void;
19
- setLoggerLevel(name: string, level: LogLevel): void;
20
- shouldLog(level: LogLevel, loggerName?: string): boolean;
18
+ getLevel(): LogLevelValue;
19
+ setLevel(level: LogLevelInput): void;
20
+ setLoggerLevel(name: string, level: LogLevelInput): void;
21
+ shouldLog(level: LogLevelInput, loggerName?: string): boolean;
21
22
  addTransport(transport: LogTransport): void;
22
23
  setTransports(transports: LogTransport[]): void;
23
24
  clearTransports(): void;
24
25
  setServiceName(name: string): void;
25
26
  log(entry: Omit<LogEntry, "environment" | "service">): void;
26
27
  closeAll(): Promise<void>;
27
- formatMessage(level: LogLevel, name: string, message: string): string;
28
+ formatMessage(level: LogLevelInput, name: string, message: string): string;
28
29
  }
29
30
  /**
30
31
  * Gets the global LoggingManager singleton instance.
@@ -1,4 +1,4 @@
1
- import { logLevelName, parseLogLevel } from "./log_level.js";
1
+ import { logLevelName, parseLogLevel, registerLogLevels } from "./log_level.js";
2
2
  import { ConsoleTransport } from "../transports/console_transport.js";
3
3
  const MANAGER_SYMBOL = /* @__PURE__ */ Symbol.for("@noego/logger");
4
4
  class LoggingManager {
@@ -16,19 +16,20 @@ class LoggingManager {
16
16
  return this.level;
17
17
  }
18
18
  setLevel(level) {
19
- this.level = level;
19
+ this.level = parseLogLevel(level);
20
20
  }
21
21
  setLoggerLevel(name, level) {
22
- this.loggerLevels.set(name, level);
22
+ this.loggerLevels.set(name, parseLogLevel(level));
23
23
  }
24
24
  shouldLog(level, loggerName) {
25
+ const parsedLevel = parseLogLevel(level);
25
26
  if (loggerName) {
26
27
  const loggerLevel = this.loggerLevels.get(loggerName);
27
28
  if (loggerLevel !== void 0) {
28
- return level >= loggerLevel;
29
+ return parsedLevel >= loggerLevel;
29
30
  }
30
31
  }
31
- return level >= this.level;
32
+ return parsedLevel >= this.level;
32
33
  }
33
34
  addTransport(transport) {
34
35
  this.transports.push(transport);
@@ -75,6 +76,9 @@ function getManager() {
75
76
  }
76
77
  function configureLogging(options) {
77
78
  const manager = getManager();
79
+ if (options.levels) {
80
+ registerLogLevels(options.levels);
81
+ }
78
82
  if (options.level !== void 0) {
79
83
  manager.setLevel(options.level);
80
84
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/logging_manager.ts"],"sourcesContent":["import { LogLevel, logLevelName, parseLogLevel } from \"./log_level.js\";\nimport type { LogEntry, LogTransport } from \"./log_transport.js\";\nimport { ConsoleTransport } from \"../transports/console_transport.js\";\n\nconst MANAGER_SYMBOL = Symbol.for(\"@noego/logger\");\n\ninterface GlobalWithManager {\n [MANAGER_SYMBOL]?: LoggingManager;\n}\n\nexport interface ConfigureLoggingOptions {\n level?: LogLevel;\n loggers?: Record<string, LogLevel>;\n transports?: LogTransport[];\n serviceName?: string;\n}\n\nexport class LoggingManager {\n private level: LogLevel;\n private transports: LogTransport[] = [];\n private service: string;\n private readonly environment: string;\n private loggerLevels: Map<string, LogLevel> = new Map();\n\n constructor() {\n const logLevelEnv =\n typeof process !== \"undefined\" ? process.env?.LOG_LEVEL : undefined;\n const serviceNameEnv =\n typeof process !== \"undefined\" ? process.env?.SERVICE_NAME : undefined;\n const nodeEnv =\n typeof process !== \"undefined\" ? process.env?.NODE_ENV : undefined;\n\n this.level = parseLogLevel(logLevelEnv);\n this.service = serviceNameEnv ?? \"noego\";\n this.environment = nodeEnv ?? \"development\";\n }\n\n getLevel(): LogLevel {\n return this.level;\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n setLoggerLevel(name: string, level: LogLevel): void {\n this.loggerLevels.set(name, level);\n }\n\n shouldLog(level: LogLevel, loggerName?: string): boolean {\n if (loggerName) {\n const loggerLevel = this.loggerLevels.get(loggerName);\n if (loggerLevel !== undefined) {\n return level >= loggerLevel;\n }\n }\n return level >= this.level;\n }\n\n addTransport(transport: LogTransport): void {\n this.transports.push(transport);\n }\n\n setTransports(transports: LogTransport[]): void {\n this.transports = [...transports];\n }\n\n clearTransports(): void {\n this.transports = [];\n }\n\n setServiceName(name: string): void {\n this.service = name;\n }\n\n log(entry: Omit<LogEntry, \"environment\" | \"service\">): void {\n const fullEntry: LogEntry = {\n ...entry,\n environment: this.environment,\n service: this.service,\n };\n\n for (const transport of this.transports) {\n transport.log(fullEntry);\n }\n }\n\n async closeAll(): Promise<void> {\n for (const transport of this.transports) {\n if (transport.close) {\n await transport.close();\n }\n }\n }\n\n formatMessage(level: LogLevel, name: string, message: string): string {\n const timestamp = new Date().toISOString();\n return `[${timestamp}] [${name}] [${logLevelName(level)}] ${message}`;\n }\n}\n\n/**\n * Gets the global LoggingManager singleton instance.\n * Creates one with a default ConsoleTransport if it doesn't exist.\n */\nexport function getManager(): LoggingManager {\n const global = globalThis as GlobalWithManager;\n\n if (!global[MANAGER_SYMBOL]) {\n const manager = new LoggingManager();\n\n // Add default ConsoleTransport\n manager.addTransport(new ConsoleTransport());\n\n global[MANAGER_SYMBOL] = manager;\n }\n\n return global[MANAGER_SYMBOL];\n}\n\n/**\n * Configures the global LoggingManager instance.\n * This mutates the singleton instance returned by getManager().\n */\nexport function configureLogging(options: ConfigureLoggingOptions): void {\n const manager = getManager();\n\n if (options.level !== undefined) {\n manager.setLevel(options.level);\n }\n\n if (options.loggers) {\n for (const [name, level] of Object.entries(options.loggers)) {\n manager.setLoggerLevel(name, level);\n }\n }\n\n if (options.transports) {\n // Clear existing transports and add new ones\n manager.setTransports(options.transports);\n }\n\n if (options.serviceName) {\n // Update service name\n manager.setServiceName(options.serviceName);\n }\n}\n\n/**\n * Shuts down the global LoggingManager by closing all transports.\n */\nexport async function shutdown(): Promise<void> {\n const manager = getManager();\n await manager.closeAll();\n}\n"],"mappings":"AAAA,SAAmB,cAAc,qBAAqB;AAEtD,SAAS,wBAAwB;AAEjC,MAAM,iBAAiB,uBAAO,IAAI,eAAe;AAa1C,MAAM,eAAe;AAAA,EAO1B,cAAc;AALd,SAAQ,aAA6B,CAAC;AAGtC,SAAQ,eAAsC,oBAAI,IAAI;AAGpD,UAAM,cACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,YAAY;AAC5D,UAAM,iBACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,eAAe;AAC/D,UAAM,UACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,WAAW;AAE3D,SAAK,QAAQ,cAAc,WAAW;AACtC,SAAK,UAAU,kBAAkB;AACjC,SAAK,cAAc,WAAW;AAAA,EAChC;AAAA,EAEA,WAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS,OAAuB;AAC9B,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,eAAe,MAAc,OAAuB;AAClD,SAAK,aAAa,IAAI,MAAM,KAAK;AAAA,EACnC;AAAA,EAEA,UAAU,OAAiB,YAA8B;AACvD,QAAI,YAAY;AACd,YAAM,cAAc,KAAK,aAAa,IAAI,UAAU;AACpD,UAAI,gBAAgB,QAAW;AAC7B,eAAO,SAAS;AAAA,MAClB;AAAA,IACF;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,aAAa,WAA+B;AAC1C,SAAK,WAAW,KAAK,SAAS;AAAA,EAChC;AAAA,EAEA,cAAc,YAAkC;AAC9C,SAAK,aAAa,CAAC,GAAG,UAAU;AAAA,EAClC;AAAA,EAEA,kBAAwB;AACtB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEA,eAAe,MAAoB;AACjC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,OAAwD;AAC1D,UAAM,YAAsB;AAAA,MAC1B,GAAG;AAAA,MACH,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK;AAAA,IAChB;AAEA,eAAW,aAAa,KAAK,YAAY;AACvC,gBAAU,IAAI,SAAS;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,WAA0B;AAC9B,eAAW,aAAa,KAAK,YAAY;AACvC,UAAI,UAAU,OAAO;AACnB,cAAM,UAAU,MAAM;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,OAAiB,MAAc,SAAyB;AACpE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,WAAO,IAAI,SAAS,MAAM,IAAI,MAAM,aAAa,KAAK,CAAC,KAAK,OAAO;AAAA,EACrE;AACF;AAMO,SAAS,aAA6B;AAC3C,QAAM,SAAS;AAEf,MAAI,CAAC,OAAO,cAAc,GAAG;AAC3B,UAAM,UAAU,IAAI,eAAe;AAGnC,YAAQ,aAAa,IAAI,iBAAiB,CAAC;AAE3C,WAAO,cAAc,IAAI;AAAA,EAC3B;AAEA,SAAO,OAAO,cAAc;AAC9B;AAMO,SAAS,iBAAiB,SAAwC;AACvE,QAAM,UAAU,WAAW;AAE3B,MAAI,QAAQ,UAAU,QAAW;AAC/B,YAAQ,SAAS,QAAQ,KAAK;AAAA,EAChC;AAEA,MAAI,QAAQ,SAAS;AACnB,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,QAAQ,OAAO,GAAG;AAC3D,cAAQ,eAAe,MAAM,KAAK;AAAA,IACpC;AAAA,EACF;AAEA,MAAI,QAAQ,YAAY;AAEtB,YAAQ,cAAc,QAAQ,UAAU;AAAA,EAC1C;AAEA,MAAI,QAAQ,aAAa;AAEvB,YAAQ,eAAe,QAAQ,WAAW;AAAA,EAC5C;AACF;AAKA,eAAsB,WAA0B;AAC9C,QAAM,UAAU,WAAW;AAC3B,QAAM,QAAQ,SAAS;AACzB;","names":[]}
1
+ {"version":3,"sources":["../../src/core/logging_manager.ts"],"sourcesContent":["import { type LogLevelDefinition, type LogLevelInput, type LogLevelValue, logLevelName, parseLogLevel, registerLogLevels } from \"./log_level.js\";\nimport type { LogEntry, LogTransport } from \"./log_transport.js\";\nimport { ConsoleTransport } from \"../transports/console_transport.js\";\n\nconst MANAGER_SYMBOL = Symbol.for(\"@noego/logger\");\n\ninterface GlobalWithManager {\n [MANAGER_SYMBOL]?: LoggingManager;\n}\n\nexport interface ConfigureLoggingOptions {\n level?: LogLevelInput;\n loggers?: Record<string, LogLevelInput>;\n levels?: LogLevelDefinition[];\n transports?: LogTransport[];\n serviceName?: string;\n}\n\nexport class LoggingManager {\n private level: LogLevelValue;\n private transports: LogTransport[] = [];\n private service: string;\n private readonly environment: string;\n private loggerLevels: Map<string, LogLevelValue> = new Map();\n\n constructor() {\n const logLevelEnv =\n typeof process !== \"undefined\" ? process.env?.LOG_LEVEL : undefined;\n const serviceNameEnv =\n typeof process !== \"undefined\" ? process.env?.SERVICE_NAME : undefined;\n const nodeEnv =\n typeof process !== \"undefined\" ? process.env?.NODE_ENV : undefined;\n\n this.level = parseLogLevel(logLevelEnv);\n this.service = serviceNameEnv ?? \"noego\";\n this.environment = nodeEnv ?? \"development\";\n }\n\n getLevel(): LogLevelValue {\n return this.level;\n }\n\n setLevel(level: LogLevelInput): void {\n this.level = parseLogLevel(level);\n }\n\n setLoggerLevel(name: string, level: LogLevelInput): void {\n this.loggerLevels.set(name, parseLogLevel(level));\n }\n\n shouldLog(level: LogLevelInput, loggerName?: string): boolean {\n const parsedLevel = parseLogLevel(level);\n\n if (loggerName) {\n const loggerLevel = this.loggerLevels.get(loggerName);\n if (loggerLevel !== undefined) {\n return parsedLevel >= loggerLevel;\n }\n }\n return parsedLevel >= this.level;\n }\n\n addTransport(transport: LogTransport): void {\n this.transports.push(transport);\n }\n\n setTransports(transports: LogTransport[]): void {\n this.transports = [...transports];\n }\n\n clearTransports(): void {\n this.transports = [];\n }\n\n setServiceName(name: string): void {\n this.service = name;\n }\n\n log(entry: Omit<LogEntry, \"environment\" | \"service\">): void {\n const fullEntry: LogEntry = {\n ...entry,\n environment: this.environment,\n service: this.service,\n };\n\n for (const transport of this.transports) {\n transport.log(fullEntry);\n }\n }\n\n async closeAll(): Promise<void> {\n for (const transport of this.transports) {\n if (transport.close) {\n await transport.close();\n }\n }\n }\n\n formatMessage(level: LogLevelInput, name: string, message: string): string {\n const timestamp = new Date().toISOString();\n return `[${timestamp}] [${name}] [${logLevelName(level)}] ${message}`;\n }\n}\n\n/**\n * Gets the global LoggingManager singleton instance.\n * Creates one with a default ConsoleTransport if it doesn't exist.\n */\nexport function getManager(): LoggingManager {\n const global = globalThis as GlobalWithManager;\n\n if (!global[MANAGER_SYMBOL]) {\n const manager = new LoggingManager();\n\n // Add default ConsoleTransport\n manager.addTransport(new ConsoleTransport());\n\n global[MANAGER_SYMBOL] = manager;\n }\n\n return global[MANAGER_SYMBOL];\n}\n\n/**\n * Configures the global LoggingManager instance.\n * This mutates the singleton instance returned by getManager().\n */\nexport function configureLogging(options: ConfigureLoggingOptions): void {\n const manager = getManager();\n\n if (options.levels) {\n registerLogLevels(options.levels);\n }\n\n if (options.level !== undefined) {\n manager.setLevel(options.level);\n }\n\n if (options.loggers) {\n for (const [name, level] of Object.entries(options.loggers)) {\n manager.setLoggerLevel(name, level);\n }\n }\n\n if (options.transports) {\n // Clear existing transports and add new ones\n manager.setTransports(options.transports);\n }\n\n if (options.serviceName) {\n // Update service name\n manager.setServiceName(options.serviceName);\n }\n}\n\n/**\n * Shuts down the global LoggingManager by closing all transports.\n */\nexport async function shutdown(): Promise<void> {\n const manager = getManager();\n await manager.closeAll();\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import { Logger } from './core/abstract_logger.cjs';
2
- import './core/logging_manager.cjs';
3
2
  import './core/log_level.cjs';
3
+ import './core/logging_manager.cjs';
4
4
  import './core/log_transport.cjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { Logger } from './core/abstract_logger.js';
2
- import './core/logging_manager.js';
3
2
  import './core/log_level.js';
3
+ import './core/logging_manager.js';
4
4
  import './core/log_transport.js';
5
5
 
6
6
  /**
package/dist/index.cjs CHANGED
@@ -26,6 +26,8 @@ __export(index_exports, {
26
26
  getManager: () => import_logging_manager.getManager,
27
27
  logLevelName: () => import_log_level.logLevelName,
28
28
  parseLogLevel: () => import_log_level.parseLogLevel,
29
+ registerLogLevel: () => import_log_level.registerLogLevel,
30
+ registerLogLevels: () => import_log_level.registerLogLevels,
29
31
  shutdown: () => import_logging_manager.shutdown
30
32
  });
31
33
  module.exports = __toCommonJS(index_exports);
@@ -43,6 +45,8 @@ var import_console_transport = require("./transports/console_transport.cjs");
43
45
  getManager,
44
46
  logLevelName,
45
47
  parseLogLevel,
48
+ registerLogLevel,
49
+ registerLogLevels,
46
50
  shutdown
47
51
  });
48
52
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { LogLevel, parseLogLevel, logLevelName } from './core/log_level.cjs';\nexport type { LogEntry, LogTransport } from './core/log_transport.cjs';\nexport type { Logger } from './core/abstract_logger.cjs';\nexport { getLogger } from './get_logger.cjs';\nexport { getManager, configureLogging, shutdown, LoggingManager } from './core/logging_manager.cjs';\nexport type { ConfigureLoggingOptions } from './core/logging_manager.cjs';\nexport { ConsoleTransport } from './transports/console_transport.cjs';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAsD;AAGtD,wBAA0B;AAC1B,6BAAuE;AAEvE,+BAAiC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { LogLevel, logLevelName, parseLogLevel, registerLogLevel, registerLogLevels } from './core/log_level.cjs';\nexport type { LogLevelDefinition, LogLevelInput, LogLevelValue } from './core/log_level.cjs';\nexport type { LogEntry, LogTransport } from './core/log_transport.cjs';\nexport type { Logger } from './core/abstract_logger.cjs';\nexport { getLogger } from './get_logger.cjs';\nexport { getManager, configureLogging, shutdown, LoggingManager } from './core/logging_manager.cjs';\nexport type { ConfigureLoggingOptions } from './core/logging_manager.cjs';\nexport { ConsoleTransport } from './transports/console_transport.cjs';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA2F;AAI3F,wBAA0B;AAC1B,6BAAuE;AAEvE,+BAAiC;","names":[]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { LogLevel, logLevelName, parseLogLevel } from './core/log_level.cjs';
1
+ export { LogLevel, LogLevelDefinition, LogLevelInput, LogLevelValue, logLevelName, parseLogLevel, registerLogLevel, registerLogLevels } from './core/log_level.cjs';
2
2
  export { LogEntry, LogTransport } from './core/log_transport.cjs';
3
3
  export { Logger } from './core/abstract_logger.cjs';
4
4
  export { getLogger } from './get_logger.cjs';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { LogLevel, logLevelName, parseLogLevel } from './core/log_level.js';
1
+ export { LogLevel, LogLevelDefinition, LogLevelInput, LogLevelValue, logLevelName, parseLogLevel, registerLogLevel, registerLogLevels } from './core/log_level.js';
2
2
  export { LogEntry, LogTransport } from './core/log_transport.js';
3
3
  export { Logger } from './core/abstract_logger.js';
4
4
  export { getLogger } from './get_logger.js';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { LogLevel, parseLogLevel, logLevelName } from "./core/log_level.js";
1
+ import { LogLevel, logLevelName, parseLogLevel, registerLogLevel, registerLogLevels } from "./core/log_level.js";
2
2
  import { getLogger } from "./get_logger.js";
3
3
  import { getManager, configureLogging, shutdown, LoggingManager } from "./core/logging_manager.js";
4
4
  import { ConsoleTransport } from "./transports/console_transport.js";
@@ -11,6 +11,8 @@ export {
11
11
  getManager,
12
12
  logLevelName,
13
13
  parseLogLevel,
14
+ registerLogLevel,
15
+ registerLogLevels,
14
16
  shutdown
15
17
  };
16
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { LogLevel, parseLogLevel, logLevelName } from './core/log_level.js';\nexport type { LogEntry, LogTransport } from './core/log_transport.js';\nexport type { Logger } from './core/abstract_logger.js';\nexport { getLogger } from './get_logger.js';\nexport { getManager, configureLogging, shutdown, LoggingManager } from './core/logging_manager.js';\nexport type { ConfigureLoggingOptions } from './core/logging_manager.js';\nexport { ConsoleTransport } from './transports/console_transport.js';\n"],"mappings":"AAAA,SAAS,UAAU,eAAe,oBAAoB;AAGtD,SAAS,iBAAiB;AAC1B,SAAS,YAAY,kBAAkB,UAAU,sBAAsB;AAEvE,SAAS,wBAAwB;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { LogLevel, logLevelName, parseLogLevel, registerLogLevel, registerLogLevels } from './core/log_level.js';\nexport type { LogLevelDefinition, LogLevelInput, LogLevelValue } from './core/log_level.js';\nexport type { LogEntry, LogTransport } from './core/log_transport.js';\nexport type { Logger } from './core/abstract_logger.js';\nexport { getLogger } from './get_logger.js';\nexport { getManager, configureLogging, shutdown, LoggingManager } from './core/logging_manager.js';\nexport type { ConfigureLoggingOptions } from './core/logging_manager.js';\nexport { ConsoleTransport } from './transports/console_transport.js';\n"],"mappings":"AAAA,SAAS,UAAU,cAAc,eAAe,kBAAkB,yBAAyB;AAI3F,SAAS,iBAAiB;AAC1B,SAAS,YAAY,kBAAkB,UAAU,sBAAsB;AAEvE,SAAS,wBAAwB;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noego/logger",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "A flexible logging library for Node.js",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -51,7 +51,7 @@
51
51
  }
52
52
  },
53
53
  "devDependencies": {
54
- "@noego/ioc": "^0.0.11",
54
+ "@noego/ioc": "^0.3.1",
55
55
  "@types/node": "^20.10.4",
56
56
  "@vitest/ui": "^4.0.18",
57
57
  "tsup": "^8.5.0",