Skip to content
runtoolkit edited this page Apr 13, 2026 · 1 revision

Logger

Structured logger with log levels, an in-memory ring buffer, and a configurable sink.

Constructor

import { Logger, LogLevel } from './src/log.js';

const log = new Logger({
  maxSize:  256,           // ring buffer size (oldest entries dropped)
  minLevel: LogLevel.INFO, // minimum level to process
  sink:     null,          // custom output function (see below)
});

Log levels

LogLevel.DEBUG  // 0
LogLevel.INFO   // 1
LogLevel.WARN   // 2
LogLevel.ERROR  // 3

Logging

log.debug('msg', ...extra);
log.info('msg', ...extra);
log.warn('msg', ...extra);
log.error('msg', ...extra);

Extra arguments are stringified and appended to the message with a space.

log.info('player joined', 'alice'); // → "[INFO] player joined alice"

add() is an alias that accepts a level label string:

log.add('WARN', 'something happened');

Reading entries

log.show(20);  // → last N entries (default 20)
// → [{ level, levelCode, msg, timestamp }, ...]

log.clear();   // clear the buffer

Custom sink

By default, entries are written to console.log/warn/error/debug. Provide a custom sink to redirect output:

const log = new Logger({
  sink: (entry) => {
    myExternalLogger.write(entry.level, entry.msg);
  }
});

The sink receives: { level: string, levelCode: number, msg: string, timestamp: number }.

Errors thrown inside the sink are silently swallowed.


Runtime level control

log.setDebug(true);              // sets minLevel to DEBUG
log.setDebug(false);             // sets minLevel back to INFO
log.setMinLevel(LogLevel.WARN);  // only WARN and ERROR pass through

Clone this wiki locally