std/log/setup.ts

53 lines
1.5 KiB
TypeScript

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
// This module is browser compatible.
import type { BaseHandler } from "./base_handler.ts";
import { DEFAULT_CONFIG, DEFAULT_LEVEL } from "./_config.ts";
import { type LogConfig, Logger } from "./logger.ts";
import { state } from "./_state.ts";
/** Setup logger config. */
export function setup(config: LogConfig) {
state.config = {
handlers: { ...DEFAULT_CONFIG.handlers, ...config.handlers },
loggers: { ...DEFAULT_CONFIG.loggers, ...config.loggers },
};
// tear down existing handlers
state.handlers.forEach((handler) => {
handler.destroy();
});
state.handlers.clear();
// setup handlers
const handlers = state.config.handlers ?? {};
for (const [handlerName, handler] of Object.entries(handlers)) {
handler.setup();
state.handlers.set(handlerName, handler);
}
// remove existing loggers
state.loggers.clear();
// setup loggers
const loggers = state.config.loggers ?? {};
for (const [loggerName, loggerConfig] of Object.entries(loggers)) {
const handlerNames = loggerConfig.handlers ?? [];
const handlers: BaseHandler[] = [];
handlerNames.forEach((handlerName) => {
const handler = state.handlers.get(handlerName);
if (handler) {
handlers.push(handler);
}
});
const levelName = loggerConfig.level ?? DEFAULT_LEVEL;
const logger = new Logger(loggerName, levelName, { handlers: handlers });
state.loggers.set(loggerName, logger);
}
}
setup(DEFAULT_CONFIG);