Commit 84576c8 1 parent fa29a21 commit 84576c8 Copy full SHA for 84576c8
File tree 1 file changed +73
-0
lines changed
1 file changed +73
-0
lines changed Original file line number Diff line number Diff line change
1
+ import
2
+ logging,
3
+ strutils,
4
+ terminal,
5
+ std/ exitprocs
6
+
7
+ if isatty (stdin):
8
+ addExitProc (resetAttributes)
9
+
10
+ type
11
+ NiftyLogger * = ref object of Logger
12
+
13
+ proc logPrefix * (level: Level ): tuple [msg: string , color: ForegroundColor ] =
14
+ case level:
15
+ of lvlDebug:
16
+ return (" ---" , fgMagenta)
17
+ of lvlInfo:
18
+ return (" (i)" , fgCyan)
19
+ of lvlNotice:
20
+ return (" " , fgWhite)
21
+ of lvlWarn:
22
+ return (" (!)" , fgYellow)
23
+ of lvlError:
24
+ return (" (!)" , fgRed)
25
+ of lvlFatal:
26
+ return (" (x)" , fgRed)
27
+ else :
28
+ return (" " , fgWhite)
29
+
30
+ method log * (logger: NiftyLogger ; level: Level ; args: varargs [string , `$`]) =
31
+ var f = stdout
32
+ if level >= getLogFilter () and level >= logger.levelThreshold:
33
+ if level >= lvlWarn:
34
+ f = stderr
35
+ let ln = substituteLog (logger.fmtStr, level, args)
36
+ let prefix = level.logPrefix ()
37
+ f.setForegroundColor (prefix.color)
38
+ f.write (prefix.msg)
39
+ f.write (ln)
40
+ resetAttributes ()
41
+ f.write (" \n " )
42
+ if level in {lvlError, lvlFatal}: flushFile (f)
43
+
44
+ proc newNiftyLogger * (levelThreshold = lvlAll; fmtStr = " " ): NiftyLogger =
45
+ new result
46
+ result .fmtStr = fmtStr
47
+ result .levelThreshold = levelThreshold
48
+
49
+ proc getLogLevel * (): string =
50
+ return LevelNames [getLogFilter ()].toLowerAscii
51
+
52
+ proc setLogLevel * (val: var string ): string {.discardable .} =
53
+ var lvl: Level
54
+ case val:
55
+ of " debug" :
56
+ lvl = lvlDebug
57
+ of " info" :
58
+ lvl = lvlInfo
59
+ of " notice" :
60
+ lvl = lvlNotice
61
+ of " warn" :
62
+ lvl = lvlWarn
63
+ of " error" :
64
+ lvl = lvlError
65
+ of " fatal" :
66
+ lvl = lvlFatal
67
+ of " none" :
68
+ lvl = lvlNone
69
+ else :
70
+ val = " warn"
71
+ lvl = lvlWarn
72
+ setLogFilter (lvl)
73
+ return val
You can’t perform that action at this time.
0 commit comments