42 lines
1.3 KiB
Scheme
42 lines
1.3 KiB
Scheme
;; utils/logging/format.scm - Pure logging formatting functions
|
|
|
|
(define-module (utils logging format)
|
|
#:use-module (ice-9 format)
|
|
#:use-module (srfi srfi-19)
|
|
#:export (format-timestamp
|
|
format-log-message
|
|
get-color
|
|
color-codes))
|
|
|
|
;; Pure data: ANSI color codes
|
|
(define color-codes
|
|
'((reset . "\x1b[0m")
|
|
(bold . "\x1b[1m")
|
|
(red . "\x1b[31m")
|
|
(green . "\x1b[32m")
|
|
(yellow . "\x1b[33m")
|
|
(blue . "\x1b[34m")
|
|
(magenta . "\x1b[35m")
|
|
(cyan . "\x1b[36m")))
|
|
|
|
;; Pure function: Get color code by name
|
|
(define (get-color name)
|
|
"Pure function to get ANSI color code"
|
|
(assoc-ref color-codes name))
|
|
|
|
;; Pure function: Format timestamp
|
|
(define (format-timestamp)
|
|
"Pure function to format current timestamp"
|
|
(date->string (current-date) "~H:~M:~S"))
|
|
|
|
;; Pure function: Format complete log message
|
|
;; Input: level symbol, color symbol, prefix string, message string, args list
|
|
;; Output: formatted log message string
|
|
(define (format-log-message level color prefix message args)
|
|
"Pure function to format a complete log message"
|
|
(let ((timestamp (format-timestamp))
|
|
(formatted-msg (apply format #f message args))
|
|
(color-start (get-color color))
|
|
(color-end (get-color 'reset)))
|
|
(format #f "~a~a[lab]~a ~a ~a~%"
|
|
color-start prefix color-end timestamp formatted-msg)))
|