summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosselin Poiret <dev@jpoiret.xyz>2022-01-15 14:49:55 +0100
committerMathieu Othacehe <othacehe@gnu.org>2022-01-17 08:27:22 +0100
commitac014ddd33f49c7e49cba8cae4fba92860c2b5ec (patch)
treee2e3df6443a7cafb62d05809060ee8794116eb58
parent76c27a5792a5c075c307e005c50182a3452102ef (diff)
installer: Generalize logging facility.
* gnu/installer/utils.scm (%syslog-line-hook, open-new-log-port, installer-log-port, %installer-log-line-hook, %display-line-hook, %default-installer-line-hooks, installer-log-line): Add new variables. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
-rw-r--r--gnu/installer/utils.scm45
1 files changed, 45 insertions, 0 deletions
diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm
index 9bd41e2ca00..b1b6f8b23ff 100644
--- a/gnu/installer/utils.scm
+++ b/gnu/installer/utils.scm
@@ -37,7 +37,12 @@
37 run-command 37 run-command
38 38
39 syslog-port 39 syslog-port
40 %syslog-line-hook
40 syslog 41 syslog
42 installer-log-port
43 %installer-log-line-hook
44 %default-installer-line-hooks
45 installer-log-line
41 call-with-time 46 call-with-time
42 let/time 47 let/time
43 48
@@ -142,6 +147,9 @@ values."
142 (set! port (open-syslog-port))) 147 (set! port (open-syslog-port)))
143 (or port (%make-void-port "w"))))) 148 (or port (%make-void-port "w")))))
144 149
150(define (%syslog-line-hook line)
151 (format (syslog-port) "installer[~d]: ~a~%" (getpid) line))
152
145(define-syntax syslog 153(define-syntax syslog
146 (lambda (s) 154 (lambda (s)
147 "Like 'format', but write to syslog." 155 "Like 'format', but write to syslog."
@@ -152,6 +160,43 @@ values."
152 (syntax->datum #'fmt)))) 160 (syntax->datum #'fmt))))
153 #'(format (syslog-port) fmt (getpid) args ...)))))) 161 #'(format (syslog-port) fmt (getpid) args ...))))))
154 162
163(define (open-new-log-port)
164 (define now (localtime (time-second (current-time))))
165 (define filename
166 (format #f "/tmp/installer.~a.log"
167 (strftime "%F.%T" now)))
168 (open filename (logior O_RDWR
169 O_CREAT)))
170
171(define installer-log-port
172 (let ((port #f))
173 (lambda ()
174 "Return an input and output port to the installer log."
175 (unless port
176 (set! port (open-new-log-port)))
177 port)))
178
179(define (%installer-log-line-hook line)
180 (format (installer-log-port) "~a~%" line))
181
182(define (%display-line-hook line)
183 (display line)
184 (newline))
185
186(define %default-installer-line-hooks
187 (list %syslog-line-hook
188 %installer-log-line-hook))
189
190(define-syntax installer-log-line
191 (lambda (s)
192 "Like 'format', but uses the default line hooks, and only formats one line."
193 (syntax-case s ()
194 ((_ fmt args ...)
195 (string? (syntax->datum #'fmt))
196 #'(let ((formatted (format #f fmt args ...)))
197 (for-each (lambda (f) (f formatted))
198 %default-installer-line-hooks))))))
199
155 200
156;;; 201;;;
157;;; Client protocol. 202;;; Client protocol.