JVM 使用 Systemd 日志传输并直接输出到 JournalCTL 而不是 STDout

JVM to use Systemd log transport and output straight into JournalCTL instead of STDout

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

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