aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/frontend/src/utils/getLogger.ts
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/frontend/src/utils/getLogger.ts')
-rw-r--r--subprojects/frontend/src/utils/getLogger.ts55
1 files changed, 55 insertions, 0 deletions
diff --git a/subprojects/frontend/src/utils/getLogger.ts b/subprojects/frontend/src/utils/getLogger.ts
new file mode 100644
index 00000000..301fd76d
--- /dev/null
+++ b/subprojects/frontend/src/utils/getLogger.ts
@@ -0,0 +1,55 @@
1import styles, { type CSPair } from 'ansi-styles';
2import log from 'loglevel';
3import prefix from 'loglevel-plugin-prefix';
4
5const colors: Partial<Record<string, CSPair>> = {
6 TRACE: styles.magenta,
7 DEBUG: styles.cyan,
8 INFO: styles.blue,
9 WARN: styles.yellow,
10 ERROR: styles.red,
11};
12
13prefix.reg(log);
14
15if (import.meta.env.DEV) {
16 log.setLevel(log.levels.DEBUG);
17} else {
18 log.setLevel(log.levels.WARN);
19}
20
21if ('chrome' in window) {
22 // Only Chromium supports console ANSI escape sequences.
23 prefix.apply(log, {
24 format(level, name, timestamp) {
25 const formattedTimestamp = `${styles.gray.open}[${timestamp.toString()}]${
26 styles.gray.close
27 }`;
28 const levelColor = colors[level.toUpperCase()] || styles.red;
29 const formattedLevel = `${levelColor.open}${level}${levelColor.close}`;
30 const formattedName = `${styles.green.open}(${name || 'root'})${
31 styles.green.close
32 }`;
33 return `${formattedTimestamp} ${formattedLevel} ${formattedName}`;
34 },
35 });
36} else {
37 prefix.apply(log, {
38 template: '[%t] %l (%n)',
39 });
40}
41
42const appLogger = log.getLogger(import.meta.env.VITE_PACKAGE_NAME);
43
44appLogger.info(
45 'Version:',
46 import.meta.env.VITE_PACKAGE_NAME,
47 import.meta.env.VITE_PACKAGE_VERSION,
48);
49appLogger.info('Debug mode:', import.meta.env.DEV);
50
51export default function getLogger(name: string | symbol): log.Logger {
52 return log.getLogger(
53 `${import.meta.env.VITE_PACKAGE_NAME}.${name.toString()}`,
54 );
55}