diff options
author | Yury Benesh <ybxsoft@tut.by> | 2012-07-29 20:03:01 +0300 |
---|---|---|
committer | Yury Benesh <ybxsoft@tut.by> | 2012-07-29 20:03:01 +0300 |
commit | 3580f029612ed9713e00c58133aa1f30f4eabe97 (patch) | |
tree | 6bbbeb951a802caf95026da18a2d39787dc3f120 /devel | |
parent | 969d141ef99a409a20db262a98d2f52f854e9661 (diff) | |
download | Nim-3580f029612ed9713e00c58133aa1f30f4eabe97.tar.gz |
Rolling file logger changes. WIP.
Diffstat (limited to 'devel')
-rw-r--r-- | devel/logging.nim | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/devel/logging.nim b/devel/logging.nim index 1ef8048de..9ae36b4da 100644 --- a/devel/logging.nim +++ b/devel/logging.nim @@ -50,6 +50,8 @@ type ## message to a file maxLines: int # maximum number of lines lines: seq[string] + curLine : int + method log*(L: ref TLogger, level: TLevel, frmt: string, args: openArray[string]) = @@ -98,19 +100,40 @@ proc substituteLog*(frmt: string): string = proc newFileLogger*(filename = defaultFilename(), mode: TFileMode = fmAppend, - levelThreshold = lvlNone): ref TFileLogger = + levelThreshold = lvlAll): ref TFileLogger = new(result) result.levelThreshold = levelThreshold result.f = open(filename, mode) +# ------ + proc newRollingFileLogger*(filename = defaultFilename(), - mode: TFileMode = fmAppend, - levelThreshold = lvlNone, + mode: TFileMode = fmReadWrite, + levelThreshold = lvlAll, maxLines = 1000): ref TRollingFileLogger = new(result) result.levelThreshold = levelThreshold result.maxLines = maxLines 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 level* = lvlAll ## global log filter |