Better logging small bug in wv-dialog, conversion to stdio.

This commit is contained in:
2026-08-03 13:44:01 +02:00
parent 1ecb678e38
commit dbf108a601
8 changed files with 78 additions and 19 deletions
+45 -5
View File
@@ -448,18 +448,58 @@
(dispatch-protocol-message message)
(loop)))))))))
(define (log-backend-message level message [elapsed #f])
(define formatted
(if (number? elapsed)
(format "~a: ~a" elapsed message)
message))
(case level
((error err)
(err-webview-backend "~a" formatted))
((warning warn)
(warn-webview-backend "~a" formatted))
((info)
(info-webview-backend "~a" formatted))
(else
(dbg-webview-backend "~a" formatted))))
(define (log-structured-backend-line line)
(with-handlers
((exn:fail?
(lambda (exception)
(warn-webview-backend
"Invalid structured backend log: ~a; line: ~a"
(exn-message exception)
line))))
(define entry (string->jsexpr (substring line 5)))
(unless (hash? entry)
(error 'log-structured-backend-line "JSON object expected"))
(define level-value (hash-ref entry 'level "debug"))
(define level
(cond
((symbol? level-value) level-value)
((string? level-value) (string->symbol (string-downcase level-value)))
(else 'debug)))
(define message (hash-ref entry 'message ""))
(define elapsed (hash-ref entry 'elapsed #f))
(log-backend-message level (format "~a" message) elapsed)))
(define (log-backend-line line)
(cond
((string-prefix? line "json:")
(log-structured-backend-line line))
((regexp-match? #rx"^ERROR[ ]*:" line)
(err-webview "qt: ~a" line))
(err-webview-backend "~a" line))
((regexp-match? #rx"^WARNING[ ]*:" line)
(warn-webview "qt: ~a" line))
(warn-webview-backend "~a" line))
((regexp-match? #rx"^INFO[ ]*:" line)
(info-webview "qt: ~a" line))
(info-webview-backend "~a" line))
((regexp-match? #rx"^DEBUG[ ]*:" line)
(dbg-webview "qt: ~a" line))
(dbg-webview-backend "~a" line))
(else
(dbg-webview "qt: ~a" line))))
;; Libraries used by Qt may occasionally write unstructured text to
;; stderr. Keep it visible without confusing it with protocol output.
(dbg-webview-backend "~a" line))))
(define (start-error-forwarder!)
(set!