From 23dfe04dfa06c6388ca14305ae5ff0e7764220b0 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:37:32 +0000 Subject: [PATCH] feat: add logger package --- .github/workflows/test.yml | 1 + .vscode/settings.json | 1 + dnt.ts | 14 +++++ packages/logger/deps.ts | 1 + packages/logger/mod.ts | 102 +++++++++++++++++++++++++++++++++++++ 5 files changed, 119 insertions(+) create mode 100644 packages/logger/deps.ts create mode 100644 packages/logger/mod.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 282d7f0e1..973110ff1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,6 +6,7 @@ on: - "handlers/**" - "helpers/**" - "plugins/**" + - "packages/**" - "rest/**" - "tests/**" - "transformers/**" diff --git a/.vscode/settings.json b/.vscode/settings.json index 271323b6f..c171e0a34 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,6 +8,7 @@ "./handlers", "./helpers", "./plugins", + "./packages", "./rest", "./template/beginner", "./template/minimal", diff --git a/dnt.ts b/dnt.ts index 9a9bc919b..9ac1e3e3b 100644 --- a/dnt.ts +++ b/dnt.ts @@ -41,6 +41,14 @@ await build({ name: "./transformers", path: "transformers/mod.ts", }, + { + name: "./packages", + path: "packages/mod.ts", + }, + { + name: "./logger", + path: "packages/logger/mod.ts", + }, { name: "./plugins", path: "plugins/mod.ts", @@ -108,6 +116,12 @@ await build({ "transformers": [ "./types/transformers/mod.d.ts", ], + "packages": [ + "./types/packages/mod.d.ts", + ], + "logger": [ + "./types/packages/logger/mod.d.ts", + ], "plugins": [ "./types/plugins/mod.d.ts", ], diff --git a/packages/logger/deps.ts b/packages/logger/deps.ts new file mode 100644 index 000000000..99da1f022 --- /dev/null +++ b/packages/logger/deps.ts @@ -0,0 +1 @@ +export * from "https://deno.land/std@0.153.0/fmt/colors.ts"; \ No newline at end of file diff --git a/packages/logger/mod.ts b/packages/logger/mod.ts new file mode 100644 index 000000000..b5b8434e3 --- /dev/null +++ b/packages/logger/mod.ts @@ -0,0 +1,102 @@ +import { bold, cyan, gray, italic, red, yellow } from "./deps.ts"; + +export enum LogLevels { + Debug, + Info, + Warn, + Error, + Fatal, +} + +const prefixes = new Map([ + [LogLevels.Debug, "DEBUG"], + [LogLevels.Info, "INFO"], + [LogLevels.Warn, "WARN"], + [LogLevels.Error, "ERROR"], + [LogLevels.Fatal, "FATAL"], +]); + +const noColor: (str: string) => string = (msg) => msg; +const colorFunctions = new Map string>([ + [LogLevels.Debug, gray], + [LogLevels.Info, cyan], + [LogLevels.Warn, yellow], + [LogLevels.Error, (str: string) => red(str)], + [LogLevels.Fatal, (str: string) => red(bold(italic(str)))], +]); + +export function logger({ + logLevel = LogLevels.Info, + name, +}: { + logLevel?: LogLevels; + name?: string; +} = {}) { + function log(level: LogLevels, ...args: any[]) { + if (level < logLevel) return; + + let color = colorFunctions.get(level); + if (!color) color = noColor; + + const date = new Date(); + const log = [ + `[${date.toLocaleDateString()} ${date.toLocaleTimeString()}]`, + color(prefixes.get(level) || "DEBUG"), + name ? `${name} >` : ">", + ...args, + ]; + + switch (level) { + case LogLevels.Debug: + return console.debug(...log); + case LogLevels.Info: + return console.info(...log); + case LogLevels.Warn: + return console.warn(...log); + case LogLevels.Error: + return console.error(...log); + case LogLevels.Fatal: + return console.error(...log); + default: + return console.log(...log); + } + } + + function setLevel(level: LogLevels) { + logLevel = level; + } + + function debug(...args: any[]) { + log(LogLevels.Debug, ...args); + } + + function info(...args: any[]) { + log(LogLevels.Info, ...args); + } + + function warn(...args: any[]) { + log(LogLevels.Warn, ...args); + } + + function error(...args: any[]) { + log(LogLevels.Error, ...args); + } + + function fatal(...args: any[]) { + log(LogLevels.Fatal, ...args); + } + + return { + log, + setLevel, + debug, + info, + warn, + error, + fatal, + }; +} + +export const log = logger({ name: "Main" }); +export const createLogger = logger; +export default log;