summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2018-01-11 18:41:34 +0000
committerGitHub <noreply@github.com>2018-01-11 18:41:34 +0000
commit082868f1bbec496b52d7ce6d894eec466802c980 (patch)
tree0e88045766cdc6f250399ae47f3370f67d16c34e
parent425f221440cbd453591d0fca9eaf93671d5f6d62 (diff)
parent852e1d3da17c3a616a8e6d8cc5e3c711f527b52e (diff)
downloadNim-082868f1bbec496b52d7ce6d894eec466802c980.tar.gz
Merge pull request #7063 from yglukhov/logging-dont-crash-on-nil
logging: don't crash on nil strings
-rw-r--r--lib/pure/logging.nim15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/pure/logging.nim b/lib/pure/logging.nim
index 830820fd1..751fc0e8d 100644
--- a/lib/pure/logging.nim
+++ b/lib/pure/logging.nim
@@ -107,9 +107,14 @@ var
 proc substituteLog*(frmt: string, level: Level, args: varargs[string, `$`]): string =
   ## Format a log message using the ``frmt`` format string, ``level`` and varargs.
   ## See the module documentation for the format string syntax.
+  const nilString = "nil"
+
   var msgLen = 0
   for arg in args:
-    msgLen += arg.len
+    if arg.isNil:
+      msgLen += nilString.len
+    else:
+      msgLen += arg.len
   result = newStringOfCap(frmt.len + msgLen + 20)
   var i = 0
   while i < frmt.len:
@@ -136,7 +141,10 @@ proc substituteLog*(frmt: string, level: Level, args: varargs[string, `$`]): str
       of "levelname": result.add(LevelNames[level])
       else: discard
   for arg in args:
-    result.add(arg)
+    if arg.isNil:
+      result.add(nilString)
+    else:
+      result.add(arg)
 
 method log*(logger: Logger, level: Level, args: varargs[string, `$`]) {.
             raises: [Exception], gcsafe,
@@ -361,3 +369,6 @@ when not defined(testing) and isMainModule:
   addHandler(L)
   for i in 0 .. 25:
     info("hello", i)
+
+  var nilString: string
+  info "hello ", nilString