summary refs log tree commit diff stats
path: root/devel
diff options
context:
space:
mode:
authorYury Benesh <ybxsoft@tut.by>2012-07-29 20:03:01 +0300
committerYury Benesh <ybxsoft@tut.by>2012-07-29 20:03:01 +0300
commit3580f029612ed9713e00c58133aa1f30f4eabe97 (patch)
tree6bbbeb951a802caf95026da18a2d39787dc3f120 /devel
parent969d141ef99a409a20db262a98d2f52f854e9661 (diff)
downloadNim-3580f029612ed9713e00c58133aa1f30f4eabe97.tar.gz
Rolling file logger changes. WIP.
Diffstat (limited to 'devel')
-rw-r--r--devel/logging.nim29
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