diff options
Diffstat (limited to 'subprojects/frontend/src/utils/getLogger.ts')
-rw-r--r-- | subprojects/frontend/src/utils/getLogger.ts | 55 |
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 @@ | |||
1 | import styles, { type CSPair } from 'ansi-styles'; | ||
2 | import log from 'loglevel'; | ||
3 | import prefix from 'loglevel-plugin-prefix'; | ||
4 | |||
5 | const 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 | |||
13 | prefix.reg(log); | ||
14 | |||
15 | if (import.meta.env.DEV) { | ||
16 | log.setLevel(log.levels.DEBUG); | ||
17 | } else { | ||
18 | log.setLevel(log.levels.WARN); | ||
19 | } | ||
20 | |||
21 | if ('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 | |||
42 | const appLogger = log.getLogger(import.meta.env.VITE_PACKAGE_NAME); | ||
43 | |||
44 | appLogger.info( | ||
45 | 'Version:', | ||
46 | import.meta.env.VITE_PACKAGE_NAME, | ||
47 | import.meta.env.VITE_PACKAGE_VERSION, | ||
48 | ); | ||
49 | appLogger.info('Debug mode:', import.meta.env.DEV); | ||
50 | |||
51 | export default function getLogger(name: string | symbol): log.Logger { | ||
52 | return log.getLogger( | ||
53 | `${import.meta.env.VITE_PACKAGE_NAME}.${name.toString()}`, | ||
54 | ); | ||
55 | } | ||