Merge pull request #7063 from yglukhov/logging-dont-crash-on-nil

logging: don't crash on nil strings
This commit is contained in:
Dominik Picheta 2018-01-11 18:41:34 +00:00 • committed by GitHub
commit 082868f1bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -107,8 +107,13 @@ var
proc substituteLog*(frmt: string, level: Level, args: varargs[string, `$`]): string = proc substituteLog*(frmt: string, level: Level, args: varargs[string, `$`]): string =
## Format a log message using the ``frmt`` format string, ``level`` and varargs. ## Format a log message using the ``frmt`` format string, ``level`` and varargs.
## See the module documentation for the format string syntax. ## See the module documentation for the format string syntax.
const nilString = "nil"
var msgLen = 0 var msgLen = 0
for arg in args: for arg in args:
if arg.isNil:
msgLen += nilString.len
else:
msgLen += arg.len msgLen += arg.len
result = newStringOfCap(frmt.len + msgLen + 20) result = newStringOfCap(frmt.len + msgLen + 20)
var i = 0 var i = 0
@ -136,6 +141,9 @@ proc substituteLog*(frmt: string, level: Level, args: varargs[string, `$`]): str
of "levelname": result.add(LevelNames[level]) of "levelname": result.add(LevelNames[level])
else: discard else: discard
for arg in args: for arg in args:
if arg.isNil:
result.add(nilString)
else:
result.add(arg) result.add(arg)
method log*(logger: Logger, level: Level, args: varargs[string, `$`]) {. method log*(logger: Logger, level: Level, args: varargs[string, `$`]) {.
@ -361,3 +369,6 @@ when not defined(testing) and isMainModule:
addHandler(L) addHandler(L)
for i in 0 .. 25: for i in 0 .. 25:
info("hello", i) info("hello", i)
var nilString: string
info "hello ", nilString