ToDo/src/lib/server/log.ts

46 lines
1.3 KiB
TypeScript

export enum LogSeverity {
FATAL,
ERROR,
WARN,
INFO,
DEBUG,
TRACE
}
export enum LogModule {
PROCESS,
USER,
DATABASE
}
abstract class Logger {
readonly module = {
...LogModule
}
abstract log(severity: LogSeverity, module: LogModule, message: string): void
fatal(module: LogModule, message: string): void { this.log(LogSeverity.FATAL, module, message) }
error(module: LogModule, message: string): void { this.log(LogSeverity.ERROR, module, message) }
warn(module: LogModule, message: string): void { this.log(LogSeverity.WARN, module, message) }
info(module: LogModule, message: string): void { this.log(LogSeverity.INFO, module, message) }
debug(module: LogModule, message: string): void { this.log(LogSeverity.DEBUG, module, message) }
trace(module: LogModule, message: string): void { this.log(LogSeverity.TRACE, module, message) }
}
function create_log_string(severity: LogSeverity, module: LogModule, message: string): string {
return `${(new Date()).toISOString()} [${LogModule[module]}] [${LogSeverity[severity]}] ${message}`
}
class DebugLogger extends Logger {
log(severity: LogSeverity, module: LogModule, message: string): void {
console.log(create_log_string(severity, module, message))
}
}
const _logger: Logger = new DebugLogger()
export default _logger