Rolling file logger changes. WIP.

This commit is contained in:
Yury Benesh 2012-07-29 20:03:01 +03:00
commit 3580f02961

View file

@ -50,6 +50,8 @@ type
## message to a file ## message to a file
maxLines: int # maximum number of lines maxLines: int # maximum number of lines
lines: seq[string] lines: seq[string]
curLine : int
method log*(L: ref TLogger, level: TLevel, method log*(L: ref TLogger, level: TLevel,
frmt: string, args: openArray[string]) = frmt: string, args: openArray[string]) =
@ -98,19 +100,40 @@ proc substituteLog*(frmt: string): string =
proc newFileLogger*(filename = defaultFilename(), proc newFileLogger*(filename = defaultFilename(),
mode: TFileMode = fmAppend, mode: TFileMode = fmAppend,
levelThreshold = lvlNone): ref TFileLogger = levelThreshold = lvlAll): ref TFileLogger =
new(result) new(result)
result.levelThreshold = levelThreshold result.levelThreshold = levelThreshold
result.f = open(filename, mode) result.f = open(filename, mode)
# ------
proc newRollingFileLogger*(filename = defaultFilename(), proc newRollingFileLogger*(filename = defaultFilename(),
mode: TFileMode = fmAppend, mode: TFileMode = fmReadWrite,
levelThreshold = lvlNone, levelThreshold = lvlAll,
maxLines = 1000): ref TRollingFileLogger = maxLines = 1000): ref TRollingFileLogger =
new(result) new(result)
result.levelThreshold = levelThreshold result.levelThreshold = levelThreshold
result.maxLines = maxLines result.maxLines = maxLines
result.f = open(filename, mode) result.f = open(filename, mode)
result.curLine = 0
if mode in {fmReadWrite, fmReadWriteExisting}:
readLogLines(result)
proc readLogLines(logger : ref TRollingFileLogger) =
f.readLine # TODO read all lines, update curLine
method log*(L: ref TRollingFileLogger, level: TLevel,
frmt: string, args: openArray[string]) =
# TODO
# if more than maxlines, then set cursor to zero
# otherwise add new line
# update line in the lines
# increment cursor
# store lines into file
Writeln(L.f, LevelNames[level], " ", frmt % args)
# --------
var var
level* = lvlAll ## global log filter level* = lvlAll ## global log filter