Removed formatting from logging.

This commit is contained in:
yglukhov 2015-05-28 11:24:39 +03:00
commit e65ccfb8f5
2 changed files with 27 additions and 30 deletions

View file

@ -112,27 +112,22 @@ proc substituteLog(frmt: string): string =
of "appname": result.add(app.splitFile.name) of "appname": result.add(app.splitFile.name)
else: discard else: discard
method log*(logger: Logger, level: Level, method log*(logger: Logger, level: Level, args: varargs[string, `$`]) {.
frmt: string, args: varargs[string, `$`]) {.
raises: [Exception], raises: [Exception],
tags: [TimeEffect, WriteIOEffect, ReadIOEffect].} = tags: [TimeEffect, WriteIOEffect, ReadIOEffect].} =
## Override this method in custom loggers. Default implementation does ## Override this method in custom loggers. Default implementation does
## nothing. ## nothing.
discard discard
method log*(logger: ConsoleLogger, level: Level, method log*(logger: ConsoleLogger, level: Level, args: varargs[string, `$`]) =
frmt: string, args: varargs[string, `$`]) =
## Logs to the console using ``logger`` only. ## Logs to the console using ``logger`` only.
if level >= logger.levelThreshold: if level >= logger.levelThreshold:
writeln(stdout, LevelNames[level], " ", substituteLog(logger.fmtStr), writeln(stdout, LevelNames[level], " ", substituteLog(logger.fmtStr), args)
frmt % args)
method log*(logger: FileLogger, level: Level, method log*(logger: FileLogger, level: Level, args: varargs[string, `$`]) =
frmt: string, args: varargs[string, `$`]) =
## Logs to a file using ``logger`` only. ## Logs to a file using ``logger`` only.
if level >= logger.levelThreshold: if level >= logger.levelThreshold:
writeln(logger.f, LevelNames[level], " ", writeln(logger.f, LevelNames[level], " ", substituteLog(logger.fmtStr), args)
substituteLog(logger.fmtStr), frmt % args)
proc defaultFilename*(): string = proc defaultFilename*(): string =
## Returns the default filename for a logger. ## Returns the default filename for a logger.
@ -206,8 +201,7 @@ proc rotate(logger: RollingFileLogger) =
moveFile(dir / (name & ext & srcSuff), moveFile(dir / (name & ext & srcSuff),
dir / (name & ext & ExtSep & $(i+1))) dir / (name & ext & ExtSep & $(i+1)))
method log*(logger: RollingFileLogger, level: Level, method log*(logger: RollingFileLogger, level: Level, args: varargs[string, `$`]) =
frmt: string, args: varargs[string, `$`]) =
## Logs to a file using rolling ``logger`` only. ## Logs to a file using rolling ``logger`` only.
if level >= logger.levelThreshold: if level >= logger.levelThreshold:
if logger.curLine >= logger.maxLines: if logger.curLine >= logger.maxLines:
@ -217,7 +211,7 @@ method log*(logger: RollingFileLogger, level: Level,
logger.curLine = 0 logger.curLine = 0
logger.f = open(logger.baseName, logger.baseMode) logger.f = open(logger.baseName, logger.baseMode)
writeln(logger.f, LevelNames[level], " ",substituteLog(logger.fmtStr), frmt % args) writeln(logger.f, LevelNames[level], " ", substituteLog(logger.fmtStr), args)
logger.curLine.inc logger.curLine.inc
# -------- # --------
@ -225,39 +219,39 @@ method log*(logger: RollingFileLogger, level: Level,
var level {.threadvar.}: Level ## global log filter var level {.threadvar.}: Level ## global log filter
var handlers {.threadvar.}: seq[Logger] ## handlers with their own log levels var handlers {.threadvar.}: seq[Logger] ## handlers with their own log levels
proc logLoop(level: Level, frmt: string, args: varargs[string, `$`]) = proc logLoop(level: Level, args: varargs[string, `$`]) =
for logger in items(handlers): for logger in items(handlers):
if level >= logger.levelThreshold: if level >= logger.levelThreshold:
log(logger, level, frmt, args) log(logger, level, args)
template log*(level: Level, frmt: string, args: varargs[string, `$`]) = template log*(level: Level, args: varargs[string, `$`]) =
## Logs a message to all registered handlers at the given level. ## Logs a message to all registered handlers at the given level.
bind logLoop bind logLoop
bind `%` bind `%`
bind logging.level bind logging.level
if level >= logging.level: if level >= logging.level:
logLoop(level, frmt, args) logLoop(level, args)
template debug*(frmt: string, args: varargs[string, `$`]) = template debug*(args: varargs[string, `$`]) =
## Logs a debug message to all registered handlers. ## Logs a debug message to all registered handlers.
log(lvlDebug, frmt, args) log(lvlDebug, args)
template info*(frmt: string, args: varargs[string, `$`]) = template info*(args: varargs[string, `$`]) =
## Logs an info message to all registered handlers. ## Logs an info message to all registered handlers.
log(lvlInfo, frmt, args) log(lvlInfo, args)
template warn*(frmt: string, args: varargs[string, `$`]) = template warn*(args: varargs[string, `$`]) =
## Logs a warning message to all registered handlers. ## Logs a warning message to all registered handlers.
log(lvlWarn, frmt, args) log(lvlWarn, args)
template error*(frmt: string, args: varargs[string, `$`]) = template error*(args: varargs[string, `$`]) =
## Logs an error message to all registered handlers. ## Logs an error message to all registered handlers.
log(lvlError, frmt, args) log(lvlError, args)
template fatal*(frmt: string, args: varargs[string, `$`]) = template fatal*(args: varargs[string, `$`]) =
## Logs a fatal error message to all registered handlers. ## Logs a fatal error message to all registered handlers.
log(lvlFatal, frmt, args) log(lvlFatal, args)
proc addHandler*(handler: Logger) = proc addHandler*(handler: Logger) =
## Adds ``handler`` to the list of handlers. ## Adds ``handler`` to the list of handlers.
@ -286,6 +280,4 @@ when not defined(testing) and isMainModule:
addHandler(fL) addHandler(fL)
addHandler(rL) addHandler(rL)
for i in 0 .. 25: for i in 0 .. 25:
info("hello" & $i, []) info("hello", i)

View file

@ -14,6 +14,11 @@ News
during object initialization or as a named parameter of ``initInterval()`` during object initialization or as a named parameter of ``initInterval()``
will need to be updated. will need to be updated.
- ``std.logging`` functions no longer do formatting and semantically treat
their arguments just like ``echo`` does. Affected functions: ``log``,
``debug``, ``info``, ``warn``, ``error``, ``fatal``. Custom subtypes of
``Logger`` also need to be adjusted accordingly.
Language Additions Language Additions
------------------ ------------------