diff --git a/leaky-ships/lib/backend/logging.ts b/leaky-ships/lib/backend/logging.ts index f09c83c..9109d7c 100644 --- a/leaky-ships/lib/backend/logging.ts +++ b/leaky-ships/lib/backend/logging.ts @@ -4,11 +4,22 @@ import { NextApiRequest } from 'next' import { IncomingMessage } from 'http' colors.enable() -export type LoggingTypes = 'system' | 'info.green' | 'info.cyan' | 'debug' | 'post' | 'warn' | 'error' | [string, keyof Color] +const loggingTemplates: { [key: string]: LoggingType } = { + 'system': ['SYSTEM', 'green'], + 'info.green': ['INFO', 'green'], + 'info.cyan': ['INFO', 'cyan'], + 'debug': ['Debug', 'grey'], + 'post': ['Post', 'white'], + 'warn': ['WARN', 'yellow'], + 'error': ['ERROR', 'red'] +} + +type LoggingType = [string, keyof Color] +export type Logging = keyof typeof loggingTemplates | LoggingType let started: boolean = false -export async function logStartup() { +async function logStartup() { await fs.promises.stat('log').catch(async () => { await fs.promises.mkdir('log') await logging(`Created 'log' Folder.`, ['info.cyan', 'system']) @@ -16,52 +27,14 @@ export async function logStartup() { started = true } -export async function logging(message: string, types: LoggingTypes[], req?: NextApiRequest | IncomingMessage) { +async function logging(message: string, types: Logging[], req?: NextApiRequest | IncomingMessage) { if (!started) await logStartup() - let messages = { console: message, file: message } + const messages = { console: message, file: message } types.slice().reverse().forEach(async (type) => { - switch (type) { - case 'system': - messages.console = '[SYSTEM] '.green + messages.console - messages.file = '[SYSTEM] ' + messages.file - break - - case 'info.green': - messages.console = '[INFO] '.green + messages.console - messages.file = '[INFO] ' + messages.file - break - - case 'info.cyan': - messages.console = '[INFO] '.cyan + messages.console - messages.file = '[INFO] ' + messages.file - break - - case 'debug': - messages.console = '[Debug] '.grey + messages.console - messages.file = '[Debug] ' + messages.file - break - - case 'post': - messages.console = '[POST] ' + messages.console - messages.file = '[POST] ' + messages.file - break - - case 'warn': - messages.console = '[WARN] '.yellow + messages.console - messages.file = '[WARN] ' + messages.file - break - - case 'error': - messages.console = '[ERROR] '.red + messages.console - messages.file = '[ERROR] ' + messages.file - break - - default: - messages.console = `[${type[0]}] `[type[1]] + messages.console - messages.file = `[${type[0]}] ` + messages.file - break - } + const [name, color] = typeof type === 'object' ? type : loggingTemplates[type] + messages.console = `[${name}] `[color] + messages.console + messages.file = `[${name}] ` + messages.file }) messages.console = `[${new Date().toString().slice(0, 33)}] ` + messages.console messages.file = `[${new Date().toString().slice(0, 33)}] ` + messages.file @@ -73,4 +46,6 @@ export async function logging(message: string, types: LoggingTypes[], req?: Next } await fs.promises.appendFile('log/log.txt', messages.file + '\n') console.log(messages.console) -} \ No newline at end of file +} + +export default logging \ No newline at end of file