Logv is a cognitively lightweight logging utility for Common Lisp
The most useful form is
LOGV, a macro that behaves like
PROGN except that it
writes each form and its return value to the log.
The following code:
(logv (+ 1 (logv (+ 1 1))) (+ 10 10) (* 64 64))
4096 and might write something like the following lines to the log:
; [2009/03/27] [19:15:08] [repl-thread]: (+ 1 1) -> 2 ; [2009/03/27] [19:15:08] [repl-thread]: (+ 1 (LOGV (+ 1 1))) -> 3 ; [2009/03/27] [19:15:08] [repl-thread]: (+ 10 10) -> 20 ; [2009/03/27] [19:15:08] [repl-thread]: (* 64 64) -> 4096
LOGVS is like
LOGV but understands multiple return values.
FORMAT-LOG lets you
write to the log with a format string and arguments (like
The behavior of
LOGVS is controlled by "log settings". Log settings can
be changed or accessed with
LOG-SETTING. for example the
(setf (log-setting :log-output) "/path/to/log.txt")
FORMAT-LOG write to the log file "log.txt"
:LOG-OUTPUT setting is:
Tthen things that write to the log write to
NILthen things that normally write to the log don't do anything
- a stream then things that write to the log write to the stream
- a pathname designator (a pathname or a string): then things that write to the log write to the file pointed to by the string/pathname. the file is created if it doesn't already exist. if there are special characters they are encoded in UTF-8
:LOG-PREFIX-STRING-FACTORY setting is a thunk [unary function] that returns a
string to be prepended to the log line.
DEF-LOG-ENV enables you to easily roll your own
like functions and macros. eg:
(def-log-env :my-log (:logv-macro-name my-logv :logvs-macro-name my-logvs :format-log-function-name my-format-log) :log-output "/path/to/log.txt" ; optional, defaults to t :log-prefix-string-factory #<function (lambda ()...>)> ; optional )
You can then set the log settings of your new log enviroment by adding another arg
(setf (log-setting :log-output :my-log) "/path/to/mylog.txt")
BSD. See "license.txt"