Swallow impossible exception.

This commit is contained in:
Jonathan Bernard 2023-02-25 14:31:01 -07:00
parent f3dbac0896
commit ab20a30434
2 changed files with 23 additions and 10 deletions

View File

@ -1,6 +1,6 @@
# Package # Package
version = "0.3.1" version = "0.3.2"
author = "Jonathan Bernard" author = "Jonathan Bernard"
description = "Wrapper around std/logging to provide namespaced logging." description = "Wrapper around std/logging to provide namespaced logging."
license = "MIT" license = "MIT"

View File

@ -15,7 +15,12 @@ template knownNamespaces(): TableRef[string, LoggingNamespace] =
knownNamespacesInst = newTable[string, LoggingNamespace]() knownNamespacesInst = newTable[string, LoggingNamespace]()
knownNamespacesInst knownNamespacesInst
proc initLoggingNamespace(name: string, level = lvlInfo, msgPrefix: string): LoggingNamespace = proc initLoggingNamespace(
name: string,
level = lvlInfo,
msgPrefix: string
): LoggingNamespace {.raises: [].} =
result = LoggingNamespace( result = LoggingNamespace(
name: name, name: name,
level: level, level: level,
@ -27,21 +32,27 @@ proc getLoggerForNamespace*(
namespace: string, namespace: string,
level = lvlInfo, level = lvlInfo,
msgPrefix: Option[string] = none[string]() msgPrefix: Option[string] = none[string]()
): LoggingNamespace = ): LoggingNamespace {.raises: [].} =
## Get a LogginNamesapce for the given namespace. The first time this is ## Get a LogginNamesapce for the given namespace. The first time this is
## called for a given name space a new logger will be created. In that case, ## called for a given name space a new logger will be created. In that case,
## the optional `level` and `msgPrefix` will be used to configure the logger. ## the optional `level` and `msgPrefix` will be used to configure the logger.
## In all other cases, these paratmers are ignored and the existing namespace ## In all other cases, these paratmers are ignored and the existing namespace
## instance is returned ## instance is returned
if knownNamespaces.hasKey(namespace): return knownNamespaces[namespace] if knownNamespaces.hasKey(namespace):
try: return knownNamespaces[namespace]
except KeyError:
try: error "namespaced_logging: Impossible error. " &
"knownNamespaces contains " & namespace & " but raised a KeyError " &
"trying to access it."
except: discard
else: else:
if msgPrefix.isSome: if msgPrefix.isSome:
return initLoggingNamespace(namespace, level, msgPrefix.get) return initLoggingNamespace(namespace, level, msgPrefix.get)
else: else:
return initLoggingNamespace(namespace, level, namespace & ": ") return initLoggingNamespace(namespace, level, namespace & ": ")
proc setLevelForNamespace*(namespace: string, lvl: Level, recursive = false) = proc setLevelForNamespace*(namespace: string, lvl: Level, recursive = false) {.raises: [] .} =
if recursive: if recursive:
for k, v in knownNamespaces.pairs: for k, v in knownNamespaces.pairs:
if k.startsWith(namespace): if k.startsWith(namespace):
@ -49,11 +60,13 @@ proc setLevelForNamespace*(namespace: string, lvl: Level, recursive = false) =
else: getLoggerForNamespace(namespace).level = lvl else: getLoggerForNamespace(namespace).level = lvl
proc name*(ns: LoggingNamespace): string = ns.name 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, `$`]) {.raises: [] .} =
if level >= ns.level: try:
if not ns.msgPrefix.isEmptyOrWhitespace: if level >= ns.level:
log(level, args.mapIt(ns.msgPrefix & it)) if not ns.msgPrefix.isEmptyOrWhitespace:
else: log(level, args) log(level, args.mapIt(ns.msgPrefix & it))
else: log(level, args)
except: discard
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)