| 145 | * and handles formatting, colorization, and environment-specific behavior. |
| 146 | */ |
| 147 | export class Logger { |
| 148 | private module: string |
| 149 | private config: ReturnType<typeof getLogConfig> |
| 150 | private isDev: boolean |
| 151 | private metadata: LoggerMetadata = {} |
| 152 | |
| 153 | /** |
| 154 | * Create a new logger for a specific module |
| 155 | * @param module The name of the module (e.g., 'OpenAIProvider', 'AgentBlockHandler') |
| 156 | * @param overrideConfig Optional configuration overrides |
| 157 | */ |
| 158 | constructor(module: string, overrideConfig?: LoggerConfig) { |
| 159 | this.module = module |
| 160 | this.config = getLogConfig() |
| 161 | this.isDev = getNodeEnv() === 'development' |
| 162 | |
| 163 | // Apply overrides if provided |
| 164 | if (overrideConfig) { |
| 165 | if (overrideConfig.logLevel !== undefined) { |
| 166 | const level = |
| 167 | typeof overrideConfig.logLevel === 'string' |
| 168 | ? (overrideConfig.logLevel as LogLevel) |
| 169 | : overrideConfig.logLevel |
| 170 | if (Object.values(LogLevel).includes(level)) { |
| 171 | this.config.minLevel = level |
| 172 | } |
| 173 | } |
| 174 | if (overrideConfig.colorize !== undefined) { |
| 175 | this.config.colorize = overrideConfig.colorize |
| 176 | } |
| 177 | if (overrideConfig.enabled !== undefined) { |
| 178 | this.config.enabled = overrideConfig.enabled |
| 179 | } |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | /** |
| 184 | * Creates a child logger with additional metadata merged in. |
| 185 | * The child inherits this logger's module name, config, and existing metadata. |
| 186 | * New metadata keys override existing ones with the same name. |
| 187 | */ |
| 188 | withMetadata(metadata: LoggerMetadata): Logger { |
| 189 | const child = Object.create(Logger.prototype) as Logger |
| 190 | child.module = this.module |
| 191 | child.config = this.config |
| 192 | child.isDev = this.isDev |
| 193 | child.metadata = { ...this.metadata, ...metadata } |
| 194 | return child |
| 195 | } |
| 196 | |
| 197 | /** |
| 198 | * Determines if a log at the given level should be displayed |
| 199 | */ |
| 200 | private shouldLog(level: LogLevel): boolean { |
| 201 | if (!this.config.enabled) return false |
| 202 | |
| 203 | if (getNodeEnv() === 'production' && typeof window !== 'undefined') { |
| 204 | return false |
nothing calls this directly
no outgoing calls
no test coverage detected