API reference

logger

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;

Create a logger without the provider, for scripts, packages and tests.

defineConfig

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

Types config/logger.ts. Returns its argument unchanged.

loggerProvider

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

Binds logger into the container from config/logger.ts, on the server and in the browser. In development with devtools, every record is also mirrored to the Log panel.

silentLogger

const silentLogger: Logger;

A logger that discards everything, for tests.

Logger

interface Logger {
  /** The lowest level written. Settable at run time; children copy it when created. */
  level: LogLevel;
  /** Write at `trace`: step-by-step detail. */
  trace(msg: string, fields?: Record<string, unknown>): void;
  /** Write at `debug`: detail for development. */
  debug(msg: string, fields?: Record<string, unknown>): void;
  /** Write at `info`: something that happened. */
  info(msg: string, fields?: Record<string, unknown>): void;
  /** Write at `warn`: something odd that did not fail. */
  warn(msg: string, fields?: Record<string, unknown>): void;
  /** Write at `error`. Pass an `Error` to keep its name, message, stack and code under `err`. */
  error(msg: string | Error, fields?: Record<string, unknown>): void;
  /** Write at `fatal`. Pass an `Error` to keep its name, message, stack and code under `err`. */
  fatal(msg: string | Error, fields?: Record<string, unknown>): void;
  /** A logger that adds `bindings` to every record, optionally under another name. */
  child(bindings: Record<string, unknown>, name?: string): Logger;
  /** Run `fn`, then log `msg` at info with `durationMs`, even when it throws; returns its result. */
  time<T>(msg: string, fn: () => Promise<T>, fields?: Record<string, unknown>): Promise<T>;
}

A logger: one method per level, child loggers that carry fields, and timing. Bound as logger by the provider.

LoggerOptions

interface LoggerOptions {
  /** The lowest level written. Default `info`. */
  level?: LogLevel;
  /** Shown as `[name]` in pretty output and as `name` in JSON. */
  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;
}

Options for createLogger, and the shape of config/logger.ts.

LogRecord

interface LogRecord {
  /** The level it was written at. */
  level: LogLevel;
  /** When it was written, as an ISO 8601 string. */
  time: string;
  /** The logger's name, when it has one. */
  name?: string;
  /** The message, or the error's message. */
  msg: string;
  /** Bindings, fields, `err` for errors and `durationMs` from `time()`. */
  [key: string]: unknown;
}

One log line as an object: what write receives and what json format serialises.

LoggerConfig

type LoggerConfig = LoggerOptions;

The options in config/logger.ts; the same as LoggerOptions.

LogLevel

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

A log level, lowest to highest; silent drops everything and is for configuration only.