summaryrefslogtreecommitdiff
path: root/u/trace/log/pretty_json_console.ts
blob: 758af5139a16d624adec09216437b341b6fc68da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { ANSI, LogLevel, ILogger } from './index.js';

export class PrettyJsonConsoleLogger implements ILogger {
    public log(level: LogLevel, ...trace: string[]) {
        const message = JSON.stringify(
            {
                level,
                trace,
            },
            null,
            4,
        );
        const styled = `${this.getStyle(level)}${message}${ANSI.RESET}\n`;
        this.getStream(level)(styled);
    }

    private getStream(level: LogLevel) {
        if (level === LogLevel.ERROR) {
            return console.error;
        }
        return console.log;
    }

    private getStyle(level: LogLevel) {
        switch (level) {
            case LogLevel.UNKNOWN:
            case LogLevel.INFO:
                return `${ANSI.MAGENTA}`;
            case LogLevel.DEBUG:
                return `${ANSI.CYAN}`;
            case LogLevel.WARN:
                return `${ANSI.BRIGHT_YELLOW}`;
            case LogLevel.ERROR:
                return `${ANSI.BRIGHT_RED}`;
            case LogLevel.SYS:
                return `${ANSI.DIM}${ANSI.BLUE}`;
        }
    }
}