diff --git a/.gitignore b/.gitignore index cd483d7..6ef0fba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules/ build/ bundle/ -world/ \ No newline at end of file +world/ +logs/ \ No newline at end of file diff --git a/console.ts b/console.ts index 9cfb141..792a455 100644 --- a/console.ts +++ b/console.ts @@ -1,4 +1,5 @@ import chalk from "chalk"; +import { createWriteStream, mkdirSync, existsSync, fstat } from "fs"; console.clear(); @@ -8,16 +9,26 @@ enum LogType { ERROR } -const LogTags = { - INFO: chalk.bgGreen(chalk.black(" INFO ")), - BANCHO: chalk.bgMagenta(chalk.black(" BANCHO ")), - WEBREQ: chalk.bgGreen(chalk.black(" WEBREQ ")), - CHAT: chalk.bgCyan(chalk.black(" CHAT ")), - WARN: chalk.bgYellow(chalk.black(" WARN ")), - ERROR: chalk.bgRed(" ERRR "), - REDIS: chalk.bgRed(chalk.white(" bREDIS ")), - STREAM: chalk.bgBlue(chalk.black(" STREAM ")) -} as const; +enum LogTag { + INFO, + CHAT, + WARN, + ERROR +} + +const LogTags = [ + chalk.bgGreen(chalk.black(" INFO ")), + chalk.bgCyan(chalk.black(" CHAT ")), + chalk.bgYellow(chalk.black(" WARN ")), + chalk.bgRed(" ERRR ") +] as const; + +const TagsForFile = [ + "[INFO]", + "[CHAT]", + "[WARN]", + "[ERRR]" +] as const; function correctValue(i:number) : string { if (i <= 9) return `0${i}`; @@ -26,42 +37,55 @@ function correctValue(i:number) : string { function getTime() : string { const time = new Date(); - return chalk.green(`[${correctValue(time.getHours())}:${correctValue(time.getMinutes())}:${correctValue(time.getSeconds())}]`); + return `[${correctValue(time.getHours())}:${correctValue(time.getMinutes())}:${correctValue(time.getSeconds())}]`; } -function log(tag:string, log:string, logType:LogType = LogType.INFO) : void { +function log(tag:LogTag, log:string, logType:LogType = LogType.INFO) : void { + const stringTime = getTime(), + fileTag = TagsForFile[tag], + consoleTag = LogTags[tag]; + + Console.QUEUED_FOR_LOG += `${stringTime} ${fileTag} ${log}\n`; switch (logType) { case LogType.INFO: - return console.log(`${getTime()} ${tag} ${log}`); + return console.log(`${chalk.green(stringTime)} ${consoleTag} ${log}`); case LogType.WARN: - return console.warn(`${getTime()} ${tag} ${log}`); + return console.warn(`${chalk.green(stringTime)} ${consoleTag} ${log}`); case LogType.ERROR: - return console.error(`${getTime()} ${tag} ${log}`); + return console.error(`${chalk.green(stringTime)} ${consoleTag} ${log}`); } } +if (existsSync("./logs")) { + +} else { + mkdirSync("./logs/"); +} + export class Console { - public static printWebReq(s:string) : void { - log(LogTags.WEBREQ, s); - } - - public static printStream(s:string) : void { - log(LogTags.STREAM, s); - } + public static QUEUED_FOR_LOG:string = ""; + private static logFileWriteStream = createWriteStream("./logs/latest.log"); + private static flushTimer:NodeJS.Timer = setInterval(() => { + if (Console.QUEUED_FOR_LOG.length !== 0) { + const strRef = Console.QUEUED_FOR_LOG; + Console.QUEUED_FOR_LOG = ""; + Console.logFileWriteStream.write(strRef); + } + }, 1000 * 10); public static printInfo(s:string) : void { - log(LogTags.INFO, s); + log(LogTag.INFO, s); } public static printChat(s:string) : void { - log(LogTags.CHAT, s); + log(LogTag.CHAT, s); } public static printWarn(s:string) : void { - log(LogTags.WARN, s); + log(LogTag.WARN, s, LogType.WARN); } public static printError(s:string) : void { - log(LogTags.ERROR, s); + log(LogTag.ERROR, s, LogType.ERROR); } } \ No newline at end of file