簡體   English   中英

"是否有人類可讀的結構化日志記錄格式?"

[英]Is there a human readable structured logging fomat?

我希望我的程序向它的 stderr 寫入一個同時是人類和機器可讀的日志。

要求:

  1. 日志是消息流。 即我不能只寫一個大的 xml 或 json 文檔。 每條消息都必須可以單獨解析,而不需要增量解析器或生成器。<\/li>
  2. 就本問題而言, tty 檢測<\/a>和日志格式選擇開關被視為作弊。 我希望相同的精確輸出同時是人類和機器可讀的。<\/li>
  3. 由於與 2 相同的原因,沒有后處理<\/li>
  4. 沒有臨時格式。 我不希望消費者必須編寫解析器。 連一點小事都沒有。<\/li>
  5. 沒有太晦澀的格式。 必須有一個庫來解析前 10 種最流行的通用編程語言中的這種格式,並且<\/strong>該庫必須能夠將整個日志解析為開箱即用<\/strong>的消息流,而無需消費者處理數據。<\/li><\/ol>

生命周期

日志記錄需要理解為一個生命周期,其中 JSON 日志通常以 2 種格式使用:

  • 在開發人員 PC 上,您使用美化輸出
  • 在已部署的系統中,您使用適合 Filebeat 等日志傳送器的每行裸格式的日志條目
  • 然后將日志從裸格式聚合到一個系統,供人類以可讀的方式使用

生產日志仍然是人類可讀的 - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM