Add thread-global cache of namespaces, change default formatting.

This commit is contained in:
Jonathan Bernard 2022-01-13 14:56:46 -06:00
parent 5f21b2f263
commit 7d24098475
2 changed files with 22 additions and 11 deletions

View File

@ -9,4 +9,4 @@ srcDir = "src"
# Dependencies # Dependencies
requires "nim >= 1.6.2" requires "nim >= 1.0.4"

View File

@ -1,25 +1,36 @@
import logging, sequtils import logging, sequtils, strutils
export logging.Level
type type
LoggingNamespace* = ref object LoggingNamespace* = ref object
name: string name: string
level*: Level level*: Level
prependNamespace*: bool msgPrefix*: string
proc initLoggingNamespace*( var knownNamespaces {.threadvar.}: seq[LoggingNamespace]
name: string,
level = lvlInfo,
prependNamespace = true
): LoggingNamespace =
return LoggingNamespace( proc initLoggingNamespace*(name: string, level = lvlInfo, msgPrefix: string): LoggingNamespace =
result = LoggingNamespace(
name: name, name: name,
level: level, level: level,
prependNamespace: prependNamespace) msgPrefix: msgPrefix)
knownNamespaces.add(result)
proc initLoggingNamespace*(name: string, level = lvlInfo): LoggingNamespace =
return initLoggingNamespace(name, level, name & ": ")
proc setLevelForNamespace*(namespace: string, lvl: Level) =
let found = knownNamespaces.filterIt(it.name == namespace)
for ns in found: ns.level = lvl
proc name*(ns: LoggingNamespace): string = ns.name
proc log*(ns: LoggingNamespace, level: Level, args: varargs[string, `$`]) = proc log*(ns: LoggingNamespace, level: Level, args: varargs[string, `$`]) =
if level >= ns.level: if level >= ns.level:
if ns.prependNamespace: log(level, args.mapIt(ns.name & it)) if not ns.msgPrefix.isEmptyOrWhitespace:
log(level, args.mapIt(ns.msgPrefix & it))
else: log(level, args)
proc debug*(ns: LoggingNamespace, args: varargs[string, `$`]) = log(ns, lvlDebug, args) proc debug*(ns: LoggingNamespace, args: varargs[string, `$`]) = log(ns, lvlDebug, args)
proc info*(ns: LoggingNamespace, args: varargs[string, `$`]) = log(ns, lvlInfo, args) proc info*(ns: LoggingNamespace, args: varargs[string, `$`]) = log(ns, lvlInfo, args)