UNPKG

@vector-im/matrix-bot-sdk

Version:

TypeScript/JavaScript SDK for Matrix bots and appservices

168 lines (146 loc) 5.1 kB
import { MatrixError } from "../models/MatrixError"; import { ConsoleLogger } from "./ConsoleLogger"; import { ILogger } from "./ILogger"; /** * The log levels to log at. * @category Logging */ export class LogLevel { /** * The TRACE channel */ public static readonly TRACE = new LogLevel("TRACE", -1); /** * The DEBUG channel */ public static readonly DEBUG = new LogLevel("DEBUG", 0); /** * The INFO channel */ public static readonly INFO = new LogLevel("INFO", 1); /** * The WARN channel */ public static readonly WARN = new LogLevel("WARN", 2); /** * The ERROR channel */ public static readonly ERROR = new LogLevel("ERROR", 3); private constructor(private level: string, private sequence: number) { } public includes(level: LogLevel): boolean { return level.sequence >= this.sequence; } public toString(): string { return this.level; } public static fromString(level: string, defaultLevel = LogLevel.DEBUG): LogLevel { if (!level) return defaultLevel; if (level.toUpperCase() === LogLevel.TRACE.level) return LogLevel.TRACE; if (level.toUpperCase() === LogLevel.DEBUG.level) return LogLevel.DEBUG; if (level.toUpperCase() === LogLevel.INFO.level) return LogLevel.INFO; if (level.toUpperCase() === LogLevel.WARN.level) return LogLevel.WARN; if (level.toUpperCase() === LogLevel.ERROR.level) return LogLevel.ERROR; return defaultLevel; } } /** * Service class for logging in the bot-sdk * @category Logging */ export class LogService { private static logger: ILogger = new ConsoleLogger(); private static logLevel: LogLevel = LogLevel.INFO; private static mutedModules: string[] = []; private constructor() { } /** * The level at which the LogService is running. */ public static get level(): LogLevel { return this.logLevel; } /** * Sets the log level for this logger. Defaults to DEBUG. * @param {LogLevel} level the new log level */ public static setLevel(level: LogLevel) { LogService.logLevel = level || LogLevel.DEBUG; } /** * Sets a new logger for the Log Service * @param {ILogger} logger the new logger */ public static setLogger(logger: ILogger) { LogService.logger = logger; } /** * Mutes a module from the logger. * @param {string} name The module name to mute. */ public static muteModule(name: string) { LogService.mutedModules.push(name); } /** * Logs to the TRACE channel * @param {string} module The module being logged * @param {any[]} messageOrObject The data to log */ public static trace(module: string, ...messageOrObject: any[]) { if (!LogService.logLevel.includes(LogLevel.TRACE)) return; if (LogService.mutedModules.includes(module)) return; LogService.logger.trace(module, ...messageOrObject); } /** * Logs to the DEBUG channel * @param {string} module The module being logged * @param {any[]} messageOrObject The data to log */ public static debug(module: string, ...messageOrObject: any[]) { if (!LogService.logLevel.includes(LogLevel.DEBUG)) return; if (LogService.mutedModules.includes(module)) return; LogService.logger.debug(module, ...messageOrObject); } /** * Logs to the ERROR channel * @param {string} module The module being logged * @param {any[]} messageOrObject The data to log */ public static error(module: string, ...messageOrObject: any[]) { if (!LogService.logLevel.includes(LogLevel.ERROR)) return; if (LogService.mutedModules.includes(module)) return; LogService.logger.error(module, ...messageOrObject); } /** * Logs to the INFO channel * @param {string} module The module being logged * @param {any[]} messageOrObject The data to log */ public static info(module: string, ...messageOrObject: any[]) { if (!LogService.logLevel.includes(LogLevel.INFO)) return; if (LogService.mutedModules.includes(module)) return; LogService.logger.info(module, ...messageOrObject); } /** * Logs to the WARN channel * @param {string} module The module being logged * @param {any[]} messageOrObject The data to log */ public static warn(module: string, ...messageOrObject: any[]) { if (!LogService.logLevel.includes(LogLevel.WARN)) return; if (LogService.mutedModules.includes(module)) return; LogService.logger.warn(module, ...messageOrObject); } } /** * Extracts the useful part of a request's error into something loggable. * @param {Error} err The error to parse. * @returns {*} The extracted error, or the given error if unaltered. * @category Logging */ export function extractRequestError(err: Error | MatrixError): any { if (err && 'body' in err) { return err.body; } return err; }