elfeed-log.el (2655B)
1 ;;; elfeed-log.el --- Elfeed's logging system -*- lexical-binding: t; -*- 2 3 ;;; Commentary: 4 5 ;;; Code: 6 7 (require 'cl-lib) 8 9 (defface elfeed-log-date-face 10 '((t :inherit font-lock-type-face)) 11 "Face for showing the date in the elfeed log buffer." 12 :group 'elfeed) 13 14 (defface elfeed-log-error-level-face 15 '((t :foreground "red")) 16 "Face for showing the `error' log level in the elfeed log buffer." 17 :group 'elfeed) 18 19 (defface elfeed-log-warn-level-face 20 '((t :foreground "goldenrod")) 21 "Face for showing the `warn' log level in the elfeed log buffer." 22 :group 'elfeed) 23 24 (defface elfeed-log-info-level-face 25 '((t :foreground "deep sky blue")) 26 "Face for showing the `info' log level in the elfeed log buffer." 27 :group 'elfeed) 28 29 (defface elfeed-log-debug-level-face 30 '((t :foreground "magenta2")) 31 "Face for showing the `debug' log level in the elfeed log buffer." 32 :group 'elfeed) 33 34 (defvar elfeed-log-buffer-name "*elfeed-log*" 35 "Name of buffer used for logging Elfeed events.") 36 37 (defvar elfeed-log-level 'info 38 "Lowest type of messages to be logged.") 39 40 (defun elfeed-log-buffer () 41 "Returns the buffer for `elfeed-log', creating it as needed." 42 (let ((buffer (get-buffer elfeed-log-buffer-name))) 43 (if buffer 44 buffer 45 (with-current-buffer (generate-new-buffer elfeed-log-buffer-name) 46 (special-mode) 47 (current-buffer))))) 48 49 (defun elfeed-log--level-number (level) 50 "Return a relative level number for LEVEL." 51 (cl-case level 52 (debug -10) 53 (info 0) 54 (warn 10) 55 (error 20) 56 (otherwise -10))) 57 58 (defun elfeed-log (level fmt &rest objects) 59 "Write log message FMT at LEVEL to Elfeed's log buffer. 60 61 LEVEL should be a symbol: debug, info, warn, error. 62 FMT must be a string suitable for `format' given OBJECTS as arguments." 63 (let ((log-buffer (elfeed-log-buffer)) 64 (log-level-face (cl-case level 65 (debug 'elfeed-log-debug-level-face) 66 (info 'elfeed-log-info-level-face) 67 (warn 'elfeed-log-warn-level-face) 68 (error 'elfeed-log-error-level-face))) 69 (inhibit-read-only t)) 70 (when (>= (elfeed-log--level-number level) 71 (elfeed-log--level-number elfeed-log-level)) 72 (with-current-buffer log-buffer 73 (goto-char (point-max)) 74 (insert 75 (format 76 (concat "[" (propertize "%s" 'face 'elfeed-log-date-face) "] " 77 "[" (propertize "%s" 'face log-level-face) "]: %s\n") 78 (format-time-string "%Y-%m-%d %H:%M:%S") 79 level 80 (apply #'format fmt objects))))))) 81 82 (provide 'elfeed-log) 83 84 ;;; elfeed-log.el ends here