Logging module is now thread-safe.
This commit is contained in:
parent
67e489d4e5
commit
defaf5d400
2 changed files with 30 additions and 10 deletions
|
|
@ -31,13 +31,16 @@
|
||||||
## var L = newConsoleLogger()
|
## var L = newConsoleLogger()
|
||||||
## var fL = newFileLogger("test.log", fmtStr = verboseFmtStr)
|
## var fL = newFileLogger("test.log", fmtStr = verboseFmtStr)
|
||||||
## var rL = newRollingFileLogger("rolling.log", fmtStr = verboseFmtStr)
|
## var rL = newRollingFileLogger("rolling.log", fmtStr = verboseFmtStr)
|
||||||
## handlers.add(L)
|
## addHandler(L)
|
||||||
## handlers.add(fL)
|
## addHandler(fL)
|
||||||
## handlers.add(rL)
|
## addHandler(rL)
|
||||||
## info("920410:52 accepted")
|
## info("920410:52 accepted")
|
||||||
## warn("4 8 15 16 23 4-- Error")
|
## warn("4 8 15 16 23 4-- Error")
|
||||||
## error("922044:16 SYSTEM FAILURE")
|
## error("922044:16 SYSTEM FAILURE")
|
||||||
## fatal("SYSTEM FAILURE SYSTEM FAILURE")
|
## fatal("SYSTEM FAILURE SYSTEM FAILURE")
|
||||||
|
##
|
||||||
|
## **Warning:** The global list of handlers is a thread var, this means that
|
||||||
|
## the handlers must be re-added in each thread.
|
||||||
|
|
||||||
import strutils, os, times
|
import strutils, os, times
|
||||||
|
|
||||||
|
|
@ -219,9 +222,8 @@ method log*(logger: RollingFileLogger, level: Level,
|
||||||
|
|
||||||
# --------
|
# --------
|
||||||
|
|
||||||
var
|
var level {.threadvar.}: Level ## global log filter
|
||||||
level* = lvlAll ## global log filter
|
var handlers {.threadvar.}: seq[Logger] ## handlers with their own log levels
|
||||||
handlers*: seq[Logger] = @[] ## handlers with their own log levels
|
|
||||||
|
|
||||||
proc logLoop(level: Level, frmt: string, args: varargs[string, `$`]) =
|
proc logLoop(level: Level, frmt: string, args: varargs[string, `$`]) =
|
||||||
for logger in items(handlers):
|
for logger in items(handlers):
|
||||||
|
|
@ -257,6 +259,22 @@ template fatal*(frmt: string, 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, frmt, args)
|
||||||
|
|
||||||
|
proc addHandler*(handler: Logger) =
|
||||||
|
## Adds ``handler`` to the list of handlers.
|
||||||
|
if handlers.isNil: handlers = @[]
|
||||||
|
handlers.add(handler)
|
||||||
|
|
||||||
|
proc getHandlers*(): seq[Logger] =
|
||||||
|
## Returns a list of all the registered handlers.
|
||||||
|
return handlers
|
||||||
|
|
||||||
|
proc setLogFilter*(lvl: Level) =
|
||||||
|
## Sets the global log filter.
|
||||||
|
level = lvl
|
||||||
|
|
||||||
|
proc getLogFilter*(): Level =
|
||||||
|
## Gets the global log filter.
|
||||||
|
return level
|
||||||
|
|
||||||
# --------------
|
# --------------
|
||||||
|
|
||||||
|
|
@ -264,9 +282,9 @@ when isMainModule:
|
||||||
var L = newConsoleLogger()
|
var L = newConsoleLogger()
|
||||||
var fL = newFileLogger("test.log", fmtStr = verboseFmtStr)
|
var fL = newFileLogger("test.log", fmtStr = verboseFmtStr)
|
||||||
var rL = newRollingFileLogger("rolling.log", fmtStr = verboseFmtStr)
|
var rL = newRollingFileLogger("rolling.log", fmtStr = verboseFmtStr)
|
||||||
handlers.add(L)
|
addHandler(L)
|
||||||
handlers.add(fL)
|
addHandler(fL)
|
||||||
handlers.add(rL)
|
addHandler(rL)
|
||||||
for i in 0 .. 25:
|
for i in 0 .. 25:
|
||||||
info("hello" & $i, [])
|
info("hello" & $i, [])
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,9 @@ News
|
||||||
- Tuple field names are not ignored anymore, this caused too many problems
|
- Tuple field names are not ignored anymore, this caused too many problems
|
||||||
in practice so now the behaviour as it was for version 0.9.6: If field
|
in practice so now the behaviour as it was for version 0.9.6: If field
|
||||||
names exist for the tuple type, they are checked.
|
names exist for the tuple type, they are checked.
|
||||||
|
- ``logging.level`` and ``logging.handlers`` are no longer exported.
|
||||||
|
``addHandler``, ``getHandlers``, ``setLogFilter`` and ``getLogFilter``
|
||||||
|
should be used instead.
|
||||||
|
|
||||||
Language Additions
|
Language Additions
|
||||||
------------------
|
------------------
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue