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 { return `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}` } 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') } } }