diff options
Diffstat (limited to 'utils/log/log.ts')
| -rw-r--r-- | utils/log/log.ts | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/utils/log/log.ts b/utils/log/log.ts new file mode 100644 index 0000000..1b2cfec --- /dev/null +++ b/utils/log/log.ts @@ -0,0 +1,37 @@ +/** + * Structured logging. Uses console internally but carries a consistent + * message-plus-context shape so downstream sinks can filter and format. + * The game ships with no runtime telemetry — logs are developer-facing + * only, visible in the browser devtools. + */ + +type LogLevel = 'debug' | 'info' | 'warn' | 'error' + +function emit(level: LogLevel, message: string, context?: Record<string, unknown>): void { + const payload = context ? `${message} ${JSON.stringify(context)}` : message + switch (level) { + case 'debug': + console.log(payload) + return + case 'info': + console.info(payload) + return + case 'warn': + console.warn(payload) + return + case 'error': + console.error(payload) + return + } +} + +export const log = { + debug: (message: string, context?: Record<string, unknown>): void => + emit('debug', message, context), + info: (message: string, context?: Record<string, unknown>): void => + emit('info', message, context), + warn: (message: string, context?: Record<string, unknown>): void => + emit('warn', message, context), + error: (message: string, context?: Record<string, unknown>): void => + emit('error', message, context) +} as const |
