;;; Copyright © 2019 - 2023 Jakob L. Kreuze ;;; ;;; This program is free software; you can redistribute it and/or ;;; modify it under the terms of the GNU General Public License as ;;; published by the Free Software Foundation; either version 3 of the ;;; License, or (at your option) any later version. ;;; ;;; This program is distributed in the hope that it will be useful, ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;; General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with this program. If not, see ;;; . (define-module (jakob dynamic logging) #:use-module (ice-9 format) #:use-module (jakob dynamic config) #:use-module (srfi srfi-19) #:export (log-append!)) (define %log-level (make-parameter 'info)) (define %log-file-name (make-parameter (if (%debug-enabled) "/dev/stdout" "/var/log/jakob-dynamic.log"))) (define (dominates message-level baseline-level) "Determine if `a' should be shown for baseline log level `b'." (define log-level-hierarchy '(debug info warn error)) (>= (list-index log-level-hierarchy message-level) (list-index log-level-hierarchy baseline-level))) (define (log-append! level message) "Append `message', at `level', to the log buffer." (when (dominates level (%log-level)) (let ((output-port (open-file (%log-file-name) "a")) (now (date->string (current-date) "~4"))) (format output-port "[~a] ~a: ~a~%" now level message) (close output-port))))