Log4CL is high performance extensible logging library for Common Lisp


Library is maintained by sharplispers at https://github.com/sharplispers/log4cl.


  • Modeled after Log4J with the familiar concepts such as log categories, appenders and layouts
  • No dependencies other then Bordeaux-threads
  • High performance implementation that minimizes consing, with benchmarking showing it faster then log4j in most cases.
  • Buffered and un-buffered stream appenders, console appender, file appender and daily rolling file appender with configurable name are all implemented. Auto-flushing of buffered appenders by background thread.
  • Automatic naming of log categories, so that a log statement that does not specifically name a logger, appearing in a function SOME-PACKAGE:FOO inside of a local flet function BAR, will automatically log into the category SOME-PACKAGE:FOO:BAR
  • Appenders, layouts, and most everything else is implemented via CLOS, and can be easily changed/extended/customized. Automatic log category naming is also implemented via CLOS and can be specialized per-package, so packages can implement their own custom naming options.
  • Easy/abbreviated configuration function for interactive REPL work, with several pre-defined "sane" configurations, as well as traditional log4j like configuration via properties file, with option to auto-reload on changes.
  • Pattern layout, with several enhancements, such as options to modify separator and case (including invert) of log categories, for example one can print log category FOO:BAR:BAZ as foo--bar--baz
  • Multiple logging hierarchies support, with each having an completely independent configuration with regards to log levels and appenders, suitable for example for virtual hosts.
  • Extensive test suite with over 400+ assertions.
  • Tested on SBCL, CCL, CLISP and LispWorks

A quick-start guide is provided in README.md file.

Apache 2