import { LogMessage, LoggingLevel } from './types.ts' import {make} from "../../../../di/src/global.ts"; import {Logging} from "./Logging.ts"; import {blue, cyan, gray, green, red, yellow} from "../../external/std.ts"; const isLoggerClass = (something: any): something is (typeof Logger) => { return something.prototype instanceof Logger } export { isLoggerClass } export default abstract class Logger { public abstract async write(message: LogMessage): Promise; public static register() { make(Logging).register_logger(this) } public static remove() { make(Logging).remove_logger(this) } protected format_date(date: Date): string { const hours = date.getHours() const minutes = date.getMinutes() const seconds = date.getSeconds() return `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()} ${hours > 9 ? hours : '0' + hours}:${minutes > 9 ? minutes : '0' + minutes}:${seconds > 9 ? seconds : '0' + seconds}` } protected level_display(level: LoggingLevel): string { switch(level) { case LoggingLevel.Success: return green('success') case LoggingLevel.Error: return red(' error') case LoggingLevel.Warning: return yellow('warning') case LoggingLevel.Info: return blue(' info') case LoggingLevel.Debug: return cyan(' debug') case LoggingLevel.Verbose: return gray('verbose') case LoggingLevel.Silent: return gray(' silent') } } }