diff --git a/namespaced_logging.nimble b/namespaced_logging.nimble index 0d9c484..91a4c34 100644 --- a/namespaced_logging.nimble +++ b/namespaced_logging.nimble @@ -9,4 +9,4 @@ srcDir = "src" # Dependencies -requires "nim >= 1.6.2" +requires "nim >= 1.0.4" diff --git a/src/namespaced_logging.nim b/src/namespaced_logging.nim index eda008d..992122e 100644 --- a/src/namespaced_logging.nim +++ b/src/namespaced_logging.nim @@ -1,25 +1,36 @@ -import logging, sequtils +import logging, sequtils, strutils + +export logging.Level type LoggingNamespace* = ref object name: string level*: Level - prependNamespace*: bool + msgPrefix*: string -proc initLoggingNamespace*( - name: string, - level = lvlInfo, - prependNamespace = true - ): LoggingNamespace = +var knownNamespaces {.threadvar.}: seq[LoggingNamespace] - return LoggingNamespace( +proc initLoggingNamespace*(name: string, level = lvlInfo, msgPrefix: string): LoggingNamespace = + result = LoggingNamespace( name: name, 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, `$`]) = 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 info*(ns: LoggingNamespace, args: varargs[string, `$`]) = log(ns, lvlInfo, args)