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.

Reply via email to