A set of logging utilities for Nim.
-
✓ File rotation
-
✓ Compression
-
✓ Templated log file name
-
✓ Templated log messages
-
✓ Threaded log buffering
-
✓ Async log buffering
-
✓ Logging, file rotation and compression do not block the caller
-
✓ Sensible defaults: log to "<appname>.<date>.log", daily log rotation
-
✓ Log to systemd Journald. Support structured entries.
-
✓ Support Linux, OSX, Windows
-
✓ Functional-tested
-
❏ Logging hierarchy
-
❏ Do not crash the application on write failure (e.g. broken or full disk, permission errors) - switch to logging to stderr
-
❏ Rotate logfile on SIGHUP signal
-
❏ Structured logging and optional fields
$ # install Nim using APT or from the upstream website
$ sudo apt-get install nim
$ # install nimble and then:
$ nimble install morelogging
import morelogging
let log = newAsyncFileLogger()
log.debug("debug")
log.info("info")
log.warn("warn")
log.error("error")
log.fatal("fatal")
The following formatters are supported:
$date $time $datetime $app $appdir $appname $levelid $levelname
Messages with level below level_threshold are ignored.
If buffer_size is positive, messages are buffered internally up to writeout_interval_ms
Messages with level >= flush_threshold are flushed out immediately.
proc newAsyncFileLogger*(
filename_tpl = "$app.$y$MM$dd.log",
flush_threshold = lvlError,
fmtStr = "$datetime $levelname ",
level_threshold = lvlAll,
mode: FileMode = fmAppend,
writeout_interval_ms = 100,
buffer_size = 1_048_576
): AsyncFileLogger =
proc newThreadFileLogger*(
filename_tpl = "$app.$y$MM$dd.log",
fmtStr = "$datetime $levelname ",
level_threshold = lvlAll,
mode: FileMode = fmAppend,
writeout_interval_ms = 100,
): ThreadFileLogger =
proc newThreadRotatingFileLogger*(
compress = false,
filename_tpl = "$app.$y$MM$dd.log",
fmtStr = "$datetime $levelname ",
level_threshold = lvlAll,
mode: FileMode = fmAppend,
rotate_interval = "1d",
writeout_interval_ms = 100,
): ThreadRotatingFileLogger