UNPKG

lib-comfoair

Version:

Library to communicate with Zehnder ComfoAirQ ventilation unit through the ComfoControl gateway

175 lines (174 loc) 5.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = void 0; const logLevel_1 = require("./logLevel"); const logPrinter_1 = require("./logPrinter"); /** * Logger class for managing log messages. * Supports hierarchical loggers and multiple log printers. */ class Logger { name; parent; printers = []; children = []; severity; /* * The root appliction logger. */ static root = new Logger('comfo-connect', logLevel_1.LogLevel.DEFAULT, undefined); /** * Get the root logger in the hierarchy. * @returns The root logger. */ static getRoot() { return Logger.root; } /** * Create a new logger instance. * @param name Name of the logger * @param severity Severity of messages to write * @returns */ static create(name, severity = logLevel_1.LogLevel.DEFAULT) { return new Logger(name, severity); } /** * Initialize the root logger with the given configuration. Can only be called once per session. * @example * ```typescript * Logger.start({ * name: 'comfo-connect', * level: LogLevel.DEBUG, * printers: [ new FilePrinter('./comfo.log'), ConsolePrinter() ] * }); * @param options - The configuration options for the root logger. */ static start({ /** * The name of the root logger. */ name = 'comfo-connect', /** * The log level for the root logger. */ level = logLevel_1.LogLevel.DEFAULT, /** * The printers used to output log messages; defaults to a DebugPrinter. */ printers = [new logPrinter_1.DebugPrinter()], }) { const root = Logger.getRoot(); for (const printer of printers) { root.addPrinter(printer); } if (level) { root.setLogLevel(level); } if (name) { root.setName(name); } } /** * Create a new Logger instance. * @param name - The name of the logger. * @param parent - The parent logger, if any. * @param severity - The severity level for the logger. Defaults to LogLevel.DEFAULT. */ constructor(name, severity, parent = Logger.getRoot()) { this.name = name; this.parent = parent; if (parent) { parent.children.push(this); } this.severity = severity ?? parent?.severity ?? logLevel_1.LogLevel.DEFAULT; } setLogLevel(severity) { this.severity = severity; return this; } enableLogLevel(severity) { this.severity |= severity; return this; } disableLogLevel(severity) { this.severity &= ~severity; return this; } setName(name) { this.name = name; return this; } /** * Add a printer to the logger. * @param printer - The printer to add. */ addPrinter(printer) { this.printers.push(printer); return this; } /** * Create a child logger. * @param name - The name of the child logger. * @param severity - The severity level for the child logger. Defaults to the parent's severity level. * @returns The created child logger. */ createLogger(name, severity) { return new Logger(name, severity ?? this.severity, this); } /** * Log a message with a specific severity level. * @param level - The severity level of the log message. * @param message - The log message. * @param args - Additional arguments to log. */ log(level, message, ...args) { if (!(this.severity & level)) { return; } this.printers.forEach((printer) => printer.printLine(level, this.name, message, ...args)); if (this.parent) { this.parent.log(level, message, ...args); } } /** * Log an info message. * @param message - The log message. * @param args - Additional arguments to log. */ info(message, ...args) { this.log(logLevel_1.LogLevel.INFO, message, ...args); } /** * Log a verbose message. * @param message - The log message. * @param args - Additional arguments to log. */ verbose(message, ...args) { this.log(logLevel_1.LogLevel.VERBOSE, message, ...args); } /** * Log a debug message. * @param message - The log message. * @param args - Additional arguments to log. */ debug(message, ...args) { this.log(logLevel_1.LogLevel.DEBUG, message, ...args); } /** * Log a warning message. * @param message - The log message. * @param args - Additional arguments to log. */ warn(message, ...args) { this.log(logLevel_1.LogLevel.WARNING, message, ...args); } /** * Log an error message. * @param message - The log message. * @param args - Additional arguments to log. */ error(message, ...args) { this.log(logLevel_1.LogLevel.ERROR, message, ...args); } } exports.Logger = Logger;