summaryrefslogtreecommitdiff
path: root/dynamic/logging.scm
blob: dab246488636d648b5948ab49defa1bcb2e59aa2 (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
;;; Copyright © 2019 - 2022 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 (dynamic logging)
  #:use-module (ice-9 format)
  #:use-module (srfi srfi-19)
  #:export (log-append!))

(define %log-file-name (make-parameter "/var/log/jakob-dynamic.log"))
(define %log-level (make-parameter 'info))

(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))
    (call-with-output-file (%log-file-name)
      (lambda (port)
        (let ((now (date->string (current-date) "~4")))
          (format port "[~a] ~a: ~a~%" now level message))))))