import std/os import ../src/namespaced_logging when not defined(multithreaded): {.error: "Compile this fixture with -d:multithreaded to exercise writer threads".} proc formatLine(msg: LogMessage): string {.gcsafe.} = msg.msg & "\n" proc main() = doAssert paramCount() == 2 var service = initLogService() case paramStr(1) of "file": service.addAppender(initFileLogAppender(paramStr(2))) of "console": # Keep stdout open through the library's exit hook. Redirecting it to a # file also prevents a full parent/child pipe from blocking the writer. doAssert open(stdout, paramStr(2), fmWrite) service.addAppender(initConsoleLogAppender(formatter = formatLine)) else: raise newException(ValueError, "unknown writer destination") let local = service.threadLocalRef() let logger = local.getLogger("shutdown") for i in 0 ..< 10_000: logger.info("message " & $i) # No sleep or explicit flush: normal exit must preserve accepted messages. main()