diff --git a/racket/src/io/logger/main.rkt b/racket/src/io/logger/main.rkt index d3153d6160..f5e2594463 100644 --- a/racket/src/io/logger/main.rkt +++ b/racket/src/io/logger/main.rkt @@ -144,7 +144,7 @@ ;; like `log-level?*` (define (log-message* logger level topic message data prefix? in-interrupt?) (define msg #f) - (when ((logger-max-wanted-level logger) . level>=? . level) + (when ((logger-max-wanted-level* logger) . level>=? . level) (let loop ([logger logger]) (for ([r (in-list (logger-receivers logger))]) (when ((filters-level-for-topic (log-receiver-filters r) topic) . level>=? . level) diff --git a/racket/src/io/logger/receiver.rkt b/racket/src/io/logger/receiver.rkt index 98fe093f18..127d985a62 100644 --- a/racket/src/io/logger/receiver.rkt +++ b/racket/src/io/logger/receiver.rkt @@ -94,11 +94,12 @@ ;; ---------------------------------------- -(struct stdio-log-receiver log-receiver (which) +(struct stdio-log-receiver log-receiver (rktio which) #:property prop:receiver-send (lambda (lr msg) ;; called in atomic mode and possibly in host interrupt handler + (define rktio (stdio-log-receiver-rktio lr)) (define fd (rktio_std_fd rktio (stdio-log-receiver-which lr))) (define bstr (bytes-append (string->bytes/utf-8 (vector-ref msg 1)) #"\n")) (define len (bytes-length bstr)) @@ -113,6 +114,7 @@ (define (add-stdio-log-receiver! who logger args parse-who which) (check who logger? logger) (define lr (stdio-log-receiver (parse-filters parse-who args #:default-level 'none) + rktio which)) (atomically (add-log-receiver! logger lr #f) @@ -126,11 +128,12 @@ ;; ---------------------------------------- -(struct syslog-log-receiver log-receiver (cmd) +(struct syslog-log-receiver log-receiver (rktio cmd) #:property prop:receiver-send (lambda (lr msg) ;; called in atomic mode and possibly in host interrupt handler + (define rktio (syslog-log-receiver-rktio lr)) (define bstr (bytes-append (string->bytes/utf-8 (vector-ref msg 1)) #"\n")) (define pri (case (vector-ref msg 0) @@ -143,6 +146,7 @@ (define/who (add-syslog-log-receiver! logger . args) (define lr (syslog-log-receiver (parse-filters 'make-syslog-log-receiver args #:default-level 'none) + rktio (path-bytes (find-system-path 'run-file)))) (atomically (add-log-receiver! logger lr #f) diff --git a/racket/src/io/logger/wanted.rkt b/racket/src/io/logger/wanted.rkt index 2d2347f82c..406a6958fc 100644 --- a/racket/src/io/logger/wanted.rkt +++ b/racket/src/io/logger/wanted.rkt @@ -6,6 +6,7 @@ (provide logger-wanted-level ; ok to call in host-Scheme interrupt handler logger-max-wanted-level + logger-max-wanted-level* logger-all-levels) ;; in atomic mode with interrupts disabled @@ -31,14 +32,18 @@ (define (logger-max-wanted-level logger) (atomically/no-interrupts/no-wind - (cond - [((logger-local-level-timestamp logger) . >= . (unbox (logger-root-level-timestamp-box logger))) - ;; Cached value is up-to-date - (logger-max-receiver-level logger)] - [else - ;; Traverse to set cache: - (update-logger-wanted-level! logger #f) - (logger-max-receiver-level logger)]))) + (logger-max-wanted-level* logger))) + +;; in atomic mode with interrupts disabled +(define (logger-max-wanted-level* logger) + (cond + [((logger-local-level-timestamp logger) . >= . (unbox (logger-root-level-timestamp-box logger))) + ;; Cached value is up-to-date + (logger-max-receiver-level logger)] + [else + ;; Traverse to set cache: + (update-logger-wanted-level! logger #f) + (logger-max-receiver-level logger)])) (define (update-logger-wanted-level! logger topic) (unless ((logger-local-level-timestamp logger) . >= . (unbox (logger-root-level-timestamp-box logger)))