UNPKG

@flying-dice/tslua-common

Version:

Common Utils Library

156 lines (145 loc) 4.25 kB
/** * LogLevel represents the different severity levels that can be used to log messages. * * The levels are TRACE, DEBUG, INFO, WARN, ERROR, and OFF. * * OFF is a special level that can be used to disable logging. */ export enum LogLevel { TRACE = 10, DEBUG = 20, INFO = 30, WARN = 40, ERROR = 50, OFF = 100, } /** * LoggerTransports are the functions that are used to log messages with different severity levels. * * They are statically defined on the Logger class. * * Update them to change the way messages are logged. * * @example * const logger = new Logger("MyLogger"); * logger.transports = { debug: print, info: print, warn: print, error: print }; */ export interface LoggerTransports { trace: (message: string) => void; debug: (message: string) => void; info: (message: string) => void; warn: (message: string) => void; error: (message: string) => void; } /** * Represents a logger that can be used to log messages with different severity levels. * * Change the static level property to change the severity level of messages that are logged. * * Change the static transports property to change the way messages are logged. * * Use Logger.ignore to ignore a severity level. * * @example * const logger = new Logger("MyLogger"); * Logger.level = LogLevel.DEBUG; * Logger.transports = { debug: print, info: print, warn: print, error: print }; */ export class Logger { public static level: LogLevel = LogLevel.INFO; public static transports: LoggerTransports = { trace: Logger.ignore, debug: Logger.ignore, info: Logger.ignore, warn: Logger.ignore, error: Logger.ignore, }; constructor(protected name: string) {} /** * Logs a trace message. * * Trace messages are the most verbose and should only be used for debugging. * * @param message The message to be logged. * @example * const logger = new Logger("MyLogger"); * logger.trace("This is a trace message"); */ trace(message: string) { if (Logger.level <= LogLevel.TRACE) { Logger.transports.trace(`[TRACE] [${this.name}] - ${message}`); } } /** * Logs a debug message. * * Debug messages are less verbose than trace messages and should be used for debugging. * * @param message The message to be logged. * @example * const logger = new Logger("MyLogger"); * logger.debug("This is a debug message"); */ debug(message: string) { if (Logger.level <= LogLevel.DEBUG) { Logger.transports.debug(`[DEBUG] [${this.name}] - ${message}`); } } /** * Logs an info message. * * Info messages are less verbose than debug messages and should be used for logging information. * * @param message The message to be logged. * @example * const logger = new Logger("MyLogger"); * logger.info("This is an info message"); */ info(message: string) { if (Logger.level <= LogLevel.INFO) { Logger.transports.info(`[INFO] [${this.name}] - ${message}`); } } /** * Logs a warning message. * * Warning messages are less verbose than info messages and should be used for logging warnings. * * @param message The message to be logged. * @example * const logger = new Logger("MyLogger"); * logger.warn("This is a warning message"); */ warn(message: string) { if (Logger.level <= LogLevel.WARN) { Logger.transports.warn(`[WARN] [${this.name}] - ${message}`); } } /** * Logs an error message. * * Error messages are the least verbose and should be used for logging errors. * * @param message The message to be logged. * @example * const logger = new Logger("MyLogger"); * logger.error("This is an error message"); */ error(message: string) { if (Logger.level <= LogLevel.ERROR) { Logger.transports.error(`[ERROR] [${this.name}] - ${message}`); } } /** * A transport function that does nothing. * * Use this to ignore a severity level as an alternative to setting the LogLevel, this can be useful * where for example the trace transport is enabled but sending to an alternative location, * but you want to disable info. * * @example * const logger = new Logger("MyLogger"); * logger.transports = { debug: Logger.ignore, info: Logger.ignore, warn: print, error: print }; */ public static ignore() {} }