/
log.ts
81 lines (71 loc) 路 1.8 KB
/
log.ts
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import * as logger from "../../deps/log.ts";
import { env } from "./env.ts";
import {
bold,
brightGreen,
cyan,
gray,
red,
strikethrough,
yellow,
} from "../../deps/colors.ts";
import type { LevelName, LogRecord } from "../../deps/log.ts";
// Get the log level from the environment variable LUME_LOGS
let level = env<LevelName>("LUME_LOGS")?.toUpperCase() as
| LevelName
| undefined;
if (!level || level === "NOTSET") {
level = "INFO";
}
/**
* This is the default logger. It will output color coded log messages to the
* console via `console.log()`.
*/
class ConsoleHandler extends logger.BaseHandler {
override format(logRecord: LogRecord): string {
let { msg } = logRecord;
switch (logRecord.level) {
case logger.LogLevels.WARN:
msg = `<yellow>WARN</yellow> ${msg}`;
break;
case logger.LogLevels.ERROR:
msg = `<red>ERROR</red> ${msg}`;
break;
case logger.LogLevels.CRITICAL:
msg = `<Red>CRITICAL</Red> ${msg}`;
break;
}
return msg.replaceAll(
/<(\w+)>([^<]+)<\/\1>/g,
(_, name, content) => logFormats[name]!(content),
);
}
override log(msg: string) {
console.log(msg);
}
}
logger.setup({
handlers: {
console: new ConsoleHandler("DEBUG"),
},
loggers: {
lume: {
level: level as LevelName,
handlers: ["console"],
},
},
});
export const log = logger.getLogger("lume");
const logFormats: Record<string, (str: string) => string> = {
cyan,
Cyan: (str: string) => bold(cyan(str)),
red,
Red: (str: string) => bold(red(str)),
gray,
Gray: (str: string) => bold(gray(str)),
green: brightGreen,
Green: (str: string) => bold(brightGreen(str)),
yellow: yellow,
Yellow: (str: string) => bold(yellow(str)),
del: (str: string) => strikethrough(gray(str)),
};