logger

Write readable logs in development and structured logs in production.

Developer toolsClient Server

Every export of kitr/logger, read from the published type definitions. The guide shows them in use.

kitr/logger

createLogger

function createLogger(options?: LoggerOptions): Logger;

defineConfig

const defineConfig: <const C extends LoggerOptions>(config: C) => C;

loggerProvider

const loggerProvider: import("@kitr/core").KitrProvider;

Binds logger into the container from config/logger.ts.

silentLogger

const silentLogger: Logger;

A logger that discards everything, for tests.

Logger

interface Logger {
  level: LogLevel;
  trace(msg: string, fields?: Record<string, unknown>): void;
  debug(msg: string, fields?: Record<string, unknown>): void;
  info(msg: string, fields?: Record<string, unknown>): void;
  warn(msg: string, fields?: Record<string, unknown>): void;
  error(msg: string | Error, fields?: Record<string, unknown>): void;
  fatal(msg: string | Error, fields?: Record<string, unknown>): void;
  child(bindings: Record<string, unknown>, name?: string): Logger;
  /** Time an async operation and log its duration. */
  time<T>(msg: string, fn: () => Promise<T>, fields?: Record<string, unknown>): Promise<T>;
}

LoggerOptions

interface LoggerOptions {
  level?: LogLevel;
  name?: string;
  /** 'pretty' for terminals, 'json' for production. Default: pretty in dev, json otherwise. */
  format?: 'pretty' | 'json';
  /** Fields merged into every record (e.g. requestId). */
  bindings?: Record<string, unknown>;
  /** Where lines go. Default: console. */
  write?: (line: string, record: LogRecord) => void;
}

LogRecord

interface LogRecord {
  level: LogLevel;
  time: string;
  name?: string;
  msg: string;
  [key: string]: unknown;
}

LoggerConfig

type LoggerConfig = LoggerOptions;

LogLevel

type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' | 'silent';