import std/[logging] type QueuedLogMessage* = tuple[lvl: Level, msg: string] QueueLogger* = ref object of Logger queue: seq[QueuedLogMessage] proc newQueueLogger*( levelThreshold = lvlAll, fmtStr = logging.defaultFmtStr): QueueLogger = new result result.fmtStr = fmtStr result.levelThreshold = levelThreshold result.queue = newSeq[QueuedLogMessage]() method log*(logger: QueueLogger, level: Level, args: varargs[string, `$`]) = if level >= logger.levelThreshold: logger.queue.add((level, substituteLog(logger.fmtStr, level, args))) proc clearQueue*(logger: QueueLogger) = logger.queue = newSeq[QueuedLogMessage]() func messages*(logger: QueueLogger): seq[QueuedLogMessage] = logger.queue