enh(utils) refactor emitter to use Map and Set; update logging mechanism

This commit is contained in:
Benjamin Wegener
2024-01-11 23:24:54 +00:00
parent c7ab75ecdb
commit 159e53137a
2 changed files with 36 additions and 58 deletions

View File

@@ -55,13 +55,13 @@ class Logger {
/**
* Logs a message with the specified level and options.
*
* @param {string} message - The message to be logged.
* @param {array} data - The message to be logged.
* @param {string} level - The log level (e.g., 'info', 'warn', 'error').
* @param {object} [options] - The optional log options.
* @param {number} [options.spamThreshold] - The spam threshold for duplicate messages.
* @param {string} [options.namespace] - The namespace for the log message.
*/
static log(message, level, options = Logger.#defaultOptions) {
static #log(data, level, options = Logger.#defaultOptions) {
if (!Logger.#enabled) return;
const {
@@ -69,65 +69,56 @@ class Logger {
namespace,
} = options;
if (Logger.#lastMessage === message) {
if (Logger.#lastMessage === data) {
if (spamThreshold <= Logger.#spamIndex) return;
Logger.#spamIndex++;
}
if (typeof console[level] === 'function') {
console[level](
`[${
namespace ? namespace + ' - ' : ''
}${level.toUpperCase()}] ${message}`
`[${namespace ? namespace + ' - ' : ''}${level.toUpperCase()}]`,
...data
);
} else {
console.log(
`[${namespace ? namespace + ' - ' : ''}LOG] ${message}`
);
console.log(`[${namespace ? namespace + ' - ' : ''}LOG]`, ...data);
}
if (Logger.#lastMessage !== message) _spamIndex = 0;
Logger.#lastMessage = message;
if (Logger.#lastMessage !== data) this.#spamIndex = 0;
Logger.#lastMessage = data;
}
/**
* Logs an error message.
* Logs an error.
*
* @param {string} message - The error message to log.
* @param {object} options - The options for logging. Default is Logger.#defaultOptions.
* @param {string} data - The error data to log.
*/
static error(message, options = Logger.#defaultOptions) {
Logger.log(message, 'error', options);
static error() {
Logger.#log([...arguments], 'error');
}
/**
* Logs an informational message.
* Logs an information.
*
* @param {string} message - The message to be logged.
* @param {object} options - The options for logging. (optional)
* @param {string} data - The data to be logged.
*/
static info(message, options = Logger.#defaultOptions) {
Logger.log(message, 'info', options);
static info() {
Logger.#log([...arguments], 'info');
}
/**
* Logs a warning message.
* Logs a warning.
*
* @param {string} message - The warning message to be logged.
* @param {object} options - The options for logging. Default is Logger.#defaultOptions.
* @param {string} data - The warning data to be logged.
*/
static warn(message, options = Logger.#defaultOptions) {
Logger.log(message, 'warn', options);
static warn() {
Logger.#log([...arguments], 'warn');
}
/**
* Logs a warning message.
*
* @param {string} message - The warning message to be logged.
* @param {object} [options=Logger.#defaultOptions] - The options for the warning log.
* wrapper for logging warnings.
*/
static warning(message, options = Logger.#defaultOptions) {
Logger.warn(message, options);
static warning() {
Logger.#log([...arguments], 'warn');
}
}