0

JVM 使用 Systemd 日志传输并直接输出到 JournalCTL 而不是 STDout。我正在开发 Clojure 应用程序,它将日志直接打印到标准输出中。SystemD 服务从那里挑选它并放入日志文件中。但是碰巧异常记录在多个单独的行中。如何使用具有多行日志条目的 SystemD 日志?

4

1 回答 1

0

JNA 允许这样做。尝试添加库net.java.dev.jna/jna(用 测试5.5.0),然后按照这些行编写代码以打印到日志:

(import '[com.sun.jna Function])

(def sd-journal-print (Function/getFunction "systemd" "sd_journal_print")
(def sd-journal-send (Function/getFunction "systemd" "sd_journal_send")

(def emerg-priority 0)

;; Plain print with priority and message
(.invoke sd-journal-print (to-array [emerg-priority "test\nmessage"]))

;; Structured logging
(.invoke sd-journal-send (to-array ["MESSAGE=%s" "another\ntest\nmessage" "PRIORITY=%d" emerg-priority "WHATEVER=stuff" nil])) ; nil required!

监控journalctl -f -o json-pretty是一种简单的方法来验证这是否有效......

如何将其集成到现有的日志记录中取决于您。

此 API 的介绍位于http://0pointer.de/blog/projects/journal-submit.html

于 2020-01-07T14:10:10.307 回答