Nim allows getting a line number from a template (via compile-time information). So you can make a log template to do that: import logging, strutils var logger = newConsoleLogger(fmtStr = "[$time][$levelid]") addHandler(logger) template log*(lvl: Level, data: string): untyped = let pos {.compiletime.} = instantiationInfo() const addition = when defined(release): "[$1] " % [pos.filename] else: "[$1:$2] " % [pos.filename, $pos.line] logger.log(lvl, addition & data) template log*(data: string): untyped = log(lvlInfo, data) log("hi world")
If compiled in non-release mode, it will contain line number & filename. If compiled in release mode - only filename, but this can be easily changed.