nim-cli-utils/cliutils/queue_logger.nim

26 lines
723 B
Nim

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