[英]Is there a human readable structured logging fomat?
我希望我的程序向它的 stderr 寫入一個同時是人類和機器可讀的日志。
要求:
看來application\/json-seq (RFC 7464)<\/a>確實允許 JSON 文本打印得很漂亮(人類可讀),同時只需要在常規 JSON 解碼器之上進行非常簡單的解析。 這是迄今為止最接近的一個。
我最終重新考慮了我的方法:記錄
jsonlines<\/a> - 最容易生成和使用,使用外部漂亮打印機(例如jq .<\/code><\/a>
供人類食用。
"
生命周期
日志記錄需要理解為一個生命周期,其中 JSON 日志通常以 2 種格式使用:
生產日志仍然是人類可讀的 - Kibana 等工具允許您以可讀格式查看它們並提出問題。
當您考慮上述流程時,它是有道理的,因為日志存儲高效且可讀性也很好。 不過,它需要分離關注點。
在線演示測井系統
隨時登錄本頁底部的我的雲 Elastic Search 系統。 在頁面頂部登錄我的網絡應用,然后像這樣在 Kibana 中查詢自己的 API 活動。
我的系統是針對微服務平台的日志設計——如果對它的工作原理感興趣,請參閱我的Effective API Logging博客文章。 一個好的日志系統通常需要這樣的架構設計。
YAML似乎是一個不錯的選擇。 您可以將日志作為獨立的 YAML 文檔發出,由---
[1] 分隔。 擁有多個文檔是標准的 YAML,這至少得到了我所知道的 YAML 解析器的支持。 基本的結構化數據可以在 YAML 中打印在一行中,同時仍然非常易於人類閱讀。
https://yaml.org/有一個不同編程語言的實現列表。 在stackoverflow 2021 開發者調查[2] 中,所有排名前十的編程語言都有一個實現。
{level: INFO, message: first log message, time: "2021-10-06 21:37", data: [item1, item2, item3]}
--- # document separator (and this is a comment btw)
{level: INFO, message: still logging, time: "2021-10-06 21:38", data: {key1: [nested, data], key2: whatever}}
---
{level: FATAL, message: getting bored, time: "2021-10-06 21:38", data: 0}
[1] 好的,這意味着您必須每隔一行發出---
或者您必須在解析所有行之間的文檔之前插入它。 如果你只是在每第二行發出一個---
,YAML 就滿足你的第五個要求。
[2] Kotlin 除外,但據我所知,Kotlin 用戶可以使用 java 庫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.