Skip to content

Commit

Permalink
Print log levels in different colors
Browse files Browse the repository at this point in the history
  • Loading branch information
rubensworks committed Sep 15, 2023
1 parent 05d1bd3 commit 4e931fd
Showing 1 changed file with 26 additions and 9 deletions.
35 changes: 26 additions & 9 deletions packages/logger-pretty/lib/LoggerPretty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,18 @@ const process: NodeJS.Process = require('process/');
* A logger that pretty-prints everything.
*/
export class LoggerPretty extends Logger {
public static readonly COLOR_RESET: string = '\u001B[0m';
public static readonly COLOR_RED: string = '\u001B[31m';
public static readonly COLOR_GREEN: string = '\u001B[32m';
public static readonly COLOR_YELLOW: string = '\u001B[33m';
public static readonly COLOR_BLUE: string = '\u001B[34m';
public static readonly COLOR_MAGENTA: string = '\u001B[35m';
public static readonly COLOR_CYAN: string = '\u001B[36m';
public static readonly COLOR_GRAY: string = '\u001B[90m';

private readonly level: string;
private readonly levelOrdinal: number;
private readonly actors?: Record<string, boolean>;

public constructor(args: ILoggerPrettyArgs) {
super();
this.level = args.level;
Expand All @@ -19,35 +27,44 @@ export class LoggerPretty extends Logger {
}

public debug(message: string, data?: any): void {
this.log('debug', message, data);
this.log('debug', LoggerPretty.COLOR_GRAY, message, data);
}

public error(message: string, data?: any): void {
this.log('error', message, data);
this.log('error', LoggerPretty.COLOR_RED, message, data);
}

public fatal(message: string, data?: any): void {
this.log('fatal', message, data);
this.log('fatal', LoggerPretty.COLOR_CYAN, message, data);
}

public info(message: string, data?: any): void {
this.log('info', message, data);
this.log('info', LoggerPretty.COLOR_GREEN, message, data);
}

public trace(message: string, data?: any): void {
this.log('trace', message, data);
this.log('trace', LoggerPretty.COLOR_BLUE, message, data);
}

public warn(message: string, data?: any): void {
this.log('warn', message, data);
this.log('warn', LoggerPretty.COLOR_YELLOW, message, data);
}

protected log(level: string, message: string, data?: any): void {
protected log(level: string, color: string, message: string, data?: any): void {
if (Logger.getLevelOrdinal(level) >= this.levelOrdinal &&
(!data || !('actor' in data) || !this.actors || this.actors[data.actor])) {
process.stderr.write(`[${new Date().toISOString()}] ${level.toUpperCase()}: ${message} ${objectInspect(data)}\n`);
process.stderr.write(LoggerPretty.withColor(`[${new Date().toISOString()}] ${level.toUpperCase()}: ${message} ${objectInspect(data)}\n`, color));
}
}

/**
* Return a string in a given color
* @param str The string that should be printed in
* @param color A given color
*/
public static withColor(str: any, color: string): string {
return `${color}${str}${LoggerPretty.COLOR_RESET}`;
}
}

export interface ILoggerPrettyArgs {
Expand Down

0 comments on commit 4e931fd

Please sign in to comment.