diff options
| author | Josselin Poiret <dev@jpoiret.xyz> | 2022-01-15 14:49:55 +0100 |
|---|---|---|
| committer | Mathieu Othacehe <othacehe@gnu.org> | 2022-01-17 08:27:22 +0100 |
| commit | ac014ddd33f49c7e49cba8cae4fba92860c2b5ec (patch) | |
| tree | e2e3df6443a7cafb62d05809060ee8794116eb58 | |
| parent | 76c27a5792a5c075c307e005c50182a3452102ef (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.scm | 45 |
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. |
