Skip to content
File

Blob: src/worker/services/logger.ts

typescript35 lines
1export type LogLevel = "debug" | "info" | "warn" | "error";
2 
3export interface LogFields {
4 [key: string]: unknown;
5}
6 
7export interface Logger {
8 debug: (event: string, fields?: LogFields) => void;
9 info: (event: string, fields?: LogFields) => void;
10 warn: (event: string, fields?: LogFields) => void;
11 error: (event: string, fields?: LogFields) => void;
12 child: (fields: LogFields) => Logger;
13}
14 
15const write = (level: LogLevel, component: string, baseFields: LogFields, event: string, fields: LogFields) => {
16 console.log(
17 JSON.stringify({
18 ts: new Date().toISOString(),
19 level,
20 event,
21 component,
22 ...baseFields,
23 ...fields,
24 }),
25 );
26};
27 
28export const createLogger = (component: string, baseFields: LogFields = {}): Logger => ({
29 debug: (event, fields = {}) => write("debug", component, baseFields, event, fields),
30 info: (event, fields = {}) => write("info", component, baseFields, event, fields),
31 warn: (event, fields = {}) => write("warn", component, baseFields, event, fields),
32 error: (event, fields = {}) => write("error", component, baseFields, event, fields),
33 child: (fields) => createLogger(component, { ...baseFields, ...fields }),
34});