lib-comfoair
Version:
Library to communicate with Zehnder ComfoAirQ ventilation unit through the ComfoControl gateway
175 lines (174 loc) • 5.1 kB
JavaScript
"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;