From 02e0e05c76c7877bf6e7ea416e1abc09bf05c5fa Mon Sep 17 00:00:00 2001 From: grimhilt Date: Sun, 2 Apr 2023 12:59:11 +0200 Subject: [PATCH] improve logger --- back/controllers/members.ts | 2 +- back/controllers/messages.ts | 2 +- back/controllers/rooms.ts | 2 +- back/db/db.ts | 4 +- back/mails/imap/Box.ts | 4 +- back/mails/imap/ImapInstance.ts | 4 +- back/mails/imap/ImapSync.ts | 2 +- back/mails/saveMessage.ts | 2 +- back/package-lock.json | 15 ++++++++ back/package.json | 1 + back/system/Logger.ts | 66 +++++++++++++++++++-------------- back/tsconfig.json | 2 +- 12 files changed, 66 insertions(+), 40 deletions(-) diff --git a/back/controllers/members.ts b/back/controllers/members.ts index 4641ce4..c91aad8 100644 --- a/back/controllers/members.ts +++ b/back/controllers/members.ts @@ -7,7 +7,7 @@ export async function members(body, res) { getMembers(roomId).then((addresses) => { res.status(statusCode.OK).json(addresses); }).catch((err) => { - logger.error(err) + logger.err(err) res.status(statusCode.INTERNAL_SERVER_ERROR); }); } diff --git a/back/controllers/messages.ts b/back/controllers/messages.ts index a4a22d0..9aa9c28 100644 --- a/back/controllers/messages.ts +++ b/back/controllers/messages.ts @@ -7,7 +7,7 @@ export async function messages(body, res) { getMessages(roomId).then((messages) => { res.status(statusCode.OK).json(messages); }).catch((err) => { - logger.error(err) + logger.err(err) res.status(statusCode.INTERNAL_SERVER_ERROR); }); } \ No newline at end of file diff --git a/back/controllers/rooms.ts b/back/controllers/rooms.ts index 7a299c5..5966322 100644 --- a/back/controllers/rooms.ts +++ b/back/controllers/rooms.ts @@ -7,7 +7,7 @@ export async function rooms(body, res) { getRooms(mailboxId).then((rooms) => { res.status(statusCode.OK).json(rooms); }).catch((err) => { - logger.error(err) + logger.err(err) res.status(statusCode.INTERNAL_SERVER_ERROR); }); } diff --git a/back/db/db.ts b/back/db/db.ts index 82f6786..c503dfc 100644 --- a/back/db/db.ts +++ b/back/db/db.ts @@ -12,7 +12,7 @@ export const db = mysql.createConnection({ db.connect(function (err) { if (err) { - logger.error(`Unable to connect database ${err.code}`); + logger.err(`Unable to connect database ${err.code}`); } else { logger.log("Database successfully connected"); } @@ -45,7 +45,7 @@ export function execQueryAsyncWithId(query: string, values: any[]): Promise { if (err) { - logger.error(err); + logger.err(err); throw err; } return results; diff --git a/back/mails/imap/Box.ts b/back/mails/imap/Box.ts index 01f6d14..d64c98b 100644 --- a/back/mails/imap/Box.ts +++ b/back/mails/imap/Box.ts @@ -24,7 +24,7 @@ export default class Box { const readOnly = true; this.imap.openBox(this.boxName, readOnly, (err, box) => { - if (err) logger.error(err); + if (err) logger.err(err); this.sync(this.box.uidnext, box.uidnext); }); } @@ -48,7 +48,7 @@ export default class Box { }); f.once("error", (err) => { - logger.error("Fetch error: " + err); + logger.err("Fetch error: " + err); }); f.once("end", async () => { diff --git a/back/mails/imap/ImapInstance.ts b/back/mails/imap/ImapInstance.ts index 0c19702..4169045 100644 --- a/back/mails/imap/ImapInstance.ts +++ b/back/mails/imap/ImapInstance.ts @@ -31,7 +31,7 @@ export class ImapInstance { }); this.imap.once("error", (err) => { - logger.error("Imap error for " + this.account.user + ": " + err); + logger.err("Imap error for " + this.account.user + ": " + err); }); this.imap.once("end", () => { @@ -47,7 +47,7 @@ export class ImapInstance { this.boxes.push(new Box(this.imap, mailboxes[0].mailbox_id, mailboxes[0].mailbox_name)); } else { this.imap.getBoxes("", (err, boxes) => { - if (err) logger.error(err); + if (err) logger.err(err); const allBoxName = this.getAllBox(boxes); registerMailbox(this.account.id, allBoxName).then((mailboxId) => { this.boxes.push(new Box(this.imap, mailboxId, allBoxName)); diff --git a/back/mails/imap/ImapSync.ts b/back/mails/imap/ImapSync.ts index 44669af..e80ac70 100644 --- a/back/mails/imap/ImapSync.ts +++ b/back/mails/imap/ImapSync.ts @@ -23,7 +23,7 @@ export default class ImapSync { this.addInstance(accounts[i]); } }).catch((err) => { - logger.error(err); + logger.err(err); }); } diff --git a/back/mails/saveMessage.ts b/back/mails/saveMessage.ts index 75214ce..05601aa 100644 --- a/back/mails/saveMessage.ts +++ b/back/mails/saveMessage.ts @@ -89,7 +89,7 @@ export default class RegisterMessageInApp { this.registerMembers(roomId); return roomId; } catch (err) { - logger.error(err); + logger.err(err); } } diff --git a/back/package-lock.json b/back/package-lock.json index 086e82f..f05e8fa 100644 --- a/back/package-lock.json +++ b/back/package-lock.json @@ -7,6 +7,7 @@ "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^2.1.1", + "colors": "^1.4.0", "cors": "^2.8.5", "dotenv": "^16.0.3", "express": "^4.18.2", @@ -2207,6 +2208,15 @@ "dev": true, "license": "MIT" }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/concat-map/-/concat-map-0.0.1.tgz", @@ -7508,6 +7518,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colors": { + "version": "1.4.0", + "resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/concat-map/-/concat-map-0.0.1.tgz", diff --git a/back/package.json b/back/package.json index 377ebb3..b620678 100644 --- a/back/package.json +++ b/back/package.json @@ -8,6 +8,7 @@ "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^2.1.1", + "colors": "^1.4.0", "cors": "^2.8.5", "dotenv": "^16.0.3", "express": "^4.18.2", diff --git a/back/system/Logger.ts b/back/system/Logger.ts index 87f2bbd..5da0cbe 100644 --- a/back/system/Logger.ts +++ b/back/system/Logger.ts @@ -1,42 +1,52 @@ +import color from "colors"; + +const logType = { + LOG: 0, + DEBUG: 1, + WARN: 2, + ERR: 3, +}; + class Logger { - constructor() { + constructor() {} - } - - log(...content): void { - // console.log(this._prefix("log"), content); - } - - warn(...content): void { - // console.warn(this._prefix("warn"), content); - } - - error(...content): void { - // console.error(this._prefix("err"), content); - } - - _prefix(type: string): string { - let typeStr = ""; + print(header: string, message: string, type: number) { + const content = `[${this._timestamp}] - [${header}] -- ${message}`; switch (type) { - case "log": - typeStr = "LOG" + case logType.LOG: + console.log(content); break; - case "warn": - typeStr = "WARN" + case logType.DEBUG: + console.debug(content); break; - case "err": - typeStr = "ERR" + case logType.WARN: + console.warn(content); break; - default: + case logType.ERR: + console.error(content); break; } - return `[${typeStr}: ${this._timestamp()}]`; } - _timestamp() { - return new Date().toLocaleString(); + log = (...message: any[]) => this.print("LOG", `${message}`, logType.LOG); + err = (...message: any[]) => this.print("ERR", `${message}`, logType.ERR); + warn = (...message: any[]) => this.print("WARN", `${message}`, logType.WARN); + debug = (...message: any[]) => this.print("DEBUG", `${message}`, logType.DEBUG); + success = (...message: any[]) => this.print("SUCCESS".green, `${message}`, logType.LOG); + + get = (url: string, state: string, ...message: string[]) => + this.print("GET".green, `[${state} - ${url}]: ${message}`, logType.LOG); + post = (url: string, state: string, ...message: string[]) => + this.print("POST".blue, `[${state} - ${url}]: ${message}`, logType.LOG); + put = (url: string, state: string, ...message: string[]) => + this.print("PUT".yellow, `[${state} - ${url}]: ${message}`, logType.LOG); + del = (url: string, state: string, ...message: string[]) => + this.print("DEL".red, `[${state} - ${url}]: ${message}`, logType.LOG); + + get _timestamp() { + return new Date().toLocaleString("en-GB", { hour12: false }); } } const logger = new Logger(); -export default logger; \ No newline at end of file +export default logger; diff --git a/back/tsconfig.json b/back/tsconfig.json index bbbc82f..96c7c57 100644 --- a/back/tsconfig.json +++ b/back/tsconfig.json @@ -8,5 +8,5 @@ "skipLibCheck": true, "resolveJsonModule": true, "types": ["node", "jest"], - }, + } }