Files
undead-logging/mod.ts

109 lines
3.7 KiB
TypeScript

import chalk from "chalk";
/**
* A source for pretty and cool and fun logging
*/
class Logging {
/** Can I be seen by the console? */
visible: boolean
/** What is my name? */
source: string
/**
* Create a logging source
* ```ts
* const log = new Logging("Main");
*
* log.i("Hello World!");
* ```
* @param source Module identifier. Used in every line to identify the module that sent the message.
* @param silent Set to false to log a message when the logger instantiates. Useful for debugging.
* @returns A source for logging messages to the console. Functions for info, warnings, errors, debug statements, and network events are provided and have shorthands.
*/
constructor(source: string, silent?: boolean) {
this.visible = true;
this.source = source;
if (typeof silent == 'boolean' && !silent) this.info(`Instantiated module logging`);
}
/**
*
* @param type The kind of message to log
* @param msgs Your message(s)
*/
log(type: MessageType, ...msgs: string[]) {
if (type == MessageType.Info) this.i(...msgs);
if (type == MessageType.Warn) this.w(...msgs);
if (type == MessageType.Error) this.e(...msgs);
if (type == MessageType.Debug) this.d(...msgs);
if (type == MessageType.Network) this.n(...msgs);
}
/** Logging Function */
i(...msgs: string[]) {this.info(...msgs);}
/** Logging Function */
info(...msgs: string[]) {
if (!MessageTypeVisibility.Info) return;
if (this.visible !== true) return;
console.log(chalk.gray(`${new Date().toISOString()} `) + chalk.bgWhite.black(`${this.source} [INFO]`) + chalk.whiteBright(' ' + msgs.join(' ')));
}
/** Logging Function */
w(...msgs: string[]) {this.warn(...msgs);}
/** Logging Function */
warn(...msgs: string[]) {
if (!MessageTypeVisibility.Warn) return;
if (this.visible !== true) return;
console.warn(chalk.gray(`${new Date().toISOString()} `) + chalk.bgYellow.black(`${this.source} [WARN]`) + chalk.yellowBright(' ' + msgs.join(' ')));
}
/** Logging Function */
e(...msgs: string[]) {this.error(...msgs);}
/** Logging Function */
error(...msgs: string[]) {
if (!MessageTypeVisibility.Error) return;
if (this.visible !== true) return;
console.error(chalk.gray(`${new Date().toISOString()} `) + chalk.bgRed.black(`${this.source} [ERROR]`) + chalk.redBright(' ' + msgs.join(' ')));
}
/** Logging Function */
d(...msgs: string[]) {this.debug(...msgs);}
/** Logging Function */
debug(...msgs: string[]) {
if (!MessageTypeVisibility.Debug) return;
if (this.visible !== true) return;
console.debug(chalk.gray(`${new Date().toISOString()} `) + chalk.bgGreen.black(`${this.source} [DEBUG]`) + chalk.greenBright(' ' + msgs.join(' ')));
}
/** Logging Function */
n(...msgs: string[]) {this.network(...msgs);}
/** Logging Function */
network(...msgs: string[]) {
if (!MessageTypeVisibility.Network) return;
if (this.visible !== true) return;
console.log(chalk.gray(`${new Date().toISOString()} `) + chalk.bgCyan.black(`${this.source} [NETWORK]`) + chalk.cyanBright(' ' + msgs.join(' ')));
}
}
/** Useful for conditional logging with the `log` function */
enum MessageType {
Info,
Warn,
Error,
Debug,
Network
}
/** Enable/disable logging of certain message types across all logging sources */
const MessageTypeVisibility = {
Info: true,
Warn: true,
Error: true,
Debug: true,
Network: true
}
export { MessageType, MessageTypeVisibility };
export default Logging;