Skip to content

Commit 84576c8

Browse files
committed
Fixes.
1 parent fa29a21 commit 84576c8

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

minpkg/core/niftylogger.nim

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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

0 commit comments

Comments
 (0)