[发布] elog: 提供 emacs-lisp 日志记录功能

:light_bulb: 简介

elog 的设计灵感来源于 Log4j (Java)、Winston (Node.js) 和 loguru (Python) 等流行的日志框架。在开发复杂的 Emacs 插件时,简单的 message 函数往往不够用,而 elog 提供了结构化、可配置且易于使用的日志记录功能,帮助你更好地调试和监控你的程序。

:sparkles: 主要特性

  1. 多级日志支持:提供 TRACE, DEBUG, INFO, WARNING, ERROR, FATAL 六个级别,并支持最小级别过滤。
  2. 多输出端 (Handlers):支持同时输出到 Buffer、文件或回显区 (Echo area)。
  3. 强大的上下文支持 (Context):类似 Log4j 的 MDC,支持全局、Logger 级或代码块级 (Block scope) 的上下文数据绑定。这对于追踪请求或事务非常有帮助。
  4. 自定义格式:支持通过占位符(如 %t, %l, %n)完全自定义日志格式。
  5. 自动 Buffer 轮转:自动清理旧日志行,保持 Buffer 大小可控,防止占用过多内存。
  6. 彩色输出:默认支持彩色高亮,不同级别显示不同颜色,一目了然。
  7. 性能优化:提供条件宏 (如 elog-when-debug),在未启用级别时直接跳过参数求值,减少性能开销。
  8. 异常捕获:提供 elog-catch 宏,方便地捕获并记录代码块中的异常。

:rocket: 快速上手

基本使用

(require 'elog)

(defun elog-example-basic ()
  "Demonstrate basic logging functionality."
  (interactive)
  (let ((logger (elog-logger :name "basic-example" :level 'debug)))
    ;; Log messages at different levels
    (elog-trace logger "This is a TRACE message (won't show at debug level)")
    (elog-debug logger "This is a DEBUG message")
    (elog-info logger "This is an INFO message")
    (elog-warning logger "This is a WARNING message")
    (elog-error logger "This is an ERROR message")
    (elog-fatal logger "This is a FATAL message")
    
    ;; View the log buffer
    (elog-log-view logger)))

总结

elog 旨在填补 Elisp 生态中高级日志库的空白。无论你是插件开发者还是喜欢折腾 Emacs 配置的用户,希望它能对你有所帮助。

详细的设置和用法请看 github 文档,更多的例子请看 elog/elog-examples.el

7 个赞

好啊, 虽然我写插件总要自己临时糊一个函数, 有这个方便多了