Function: jsonrpc--log-event

jsonrpc--log-event is a byte-compiled function defined in jsonrpc.el.gz.

Signature

(jsonrpc--log-event CONNECTION ORIGIN &key KIND MESSAGE FOREIGN-MESSAGE LOG-TEXT JSON TYPE ((:id REF-ID) nil) &allow-other-keys)

Documentation

Log a JSONRPC-related event. Installed in jsonrpc-event-hook.

Source Code

;; Defined in /usr/src/emacs/lisp/jsonrpc.el.gz
(cl-defun jsonrpc--log-event (connection origin
                                         &key _kind message
                                         foreign-message log-text json
                                         type ((:id ref-id))
                                         &allow-other-keys)
  "Log a JSONRPC-related event.  Installed in `jsonrpc-event-hook'."
  (let* ((props (slot-value connection '-events-buffer-config))
         (max (plist-get props :size))
         (format (plist-get props :format)))
    (when (or (null max) (cl-plusp max))
      (cl-destructuring-bind (&key method id error &allow-other-keys) message
        (let* ((inhibit-read-only t)
               (depth (length
                       (jsonrpc--sync-request-alist connection)))
               (preamble (format "[jsonrpc] %s[%s]%s "
                                 (pcase type ('error "E") ('debug "D")
                                        (_ (pcase origin
                                             ('internal "i")
                                             (_ "e"))))
                                 (format-time-string "%H:%M:%S.%3N")
                                 (if (eq origin 'internal)
                                     (if ref-id (format " [%s]" ref-id) "")
                                   (format " %s%s %s%s"
                                           (make-string (* 2 depth) ? )
                                           (pcase origin
                                             ('client "-->")
                                             ('server "<--")
                                             (_ ""))
                                           (or method "")
                                           (if id (format "[%s]" id) "")))))
               (msg
                (pcase format
                  ('full  (format "%s%s\n" preamble (or json log-text)))
                  ('short (format "%s%s\n" preamble (or log-text "")))
                  (_
                   (format "%s%s" preamble
                           (or (and foreign-message
                                    (let ((lisp-indent-function ;bug#68072
                                           #'lisp-indent-function))
                                      (concat "\n" (pp-to-string
                                                    foreign-message))))
                               (concat log-text "\n")))))))
          (goto-char (point-max))
          ;; XXX: could use `run-at-time' to delay server logs
          ;; slightly to play nice with verbose servers' stderr.
          (when error
            (setq msg (propertize msg 'face 'error)))
          (insert-before-markers msg)
          (jsonrpc--limit-buffer-size max))))))