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';