@@ -0,0 +1,12 @@ +export type LogLevel = 'info' | 'error' | 'warning' +export type IOType = 'request' | 'response' + +export interface LogData { + level: LogLevel + io_type: IOType + endpoint: string + session_id: string | null + trace_id: string + timestamp: string + [key: string]: unknown +} @@ -0,0 +1,17 @@ +import { LogData, LogLevel } from './types' + +export abstract class LoggerAdapter { + abstract log(level: LogLevel, data: Omit): void + + info(data: Omit) { + this.log('info', data) + } + + error(data: Omit) { + this.log('error', data) + } + + warning(data: Omit) { + this.log('warning', data) + } +} @@ -0,0 +1,21 @@ +import { LoggerAdapter } from './adapter' +import { LogData, LogLevel } from './types' + +export class ConsoleLogger extends LoggerAdapter { + log(level: LogLevel, data: LogData) { + const logData: LogData = { + ...data, + level, + } + + const logMessage = JSON.stringify(logData, null, 2) + + if (level === 'error') { + console.error(logMessage) + } else if (level === 'warning') { + console.warn(logMessage) + } else { + console.log(logMessage) + } + } +} @@ -0,0 +1,3 @@ +export * from './adapter' +export * from './console' +export * from './types'