summaryrefslogtreecommitdiff
path: root/jakob/dynamic/logging.scm
blob: c937c668a412e9667fd0c2458662e0e6ba5322d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
;;; Copyright © 2019 - 2023 Jakob L. Kreuze <zerodaysfordays@sdf.org>
;;;
;;; 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
;;; <http://www.gnu.org/licenses/>.

(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))))