[英]Zap stack traces vs. error messages on google cloud
我正在使用 zapp 在托管在谷歌雲上的服務上記錄錯誤消息,並且看到雖然成功記錄了錯誤,但存儲在谷歌雲日志的“消息”字段中的文本是堆棧跟蹤,而不是錯誤我已記錄的消息。
示例代碼:
var log *zap.Logger
if err := doStuff(); err != nil {
log.Error(<error message I want to log>, zap.Error(err))
}
這很好用,除了 google cloud logging 和 stackdriver 將使用在結構化日志的message
字段中調用zap.Error
捕獲的堆棧跟蹤。 我定義的消息出現在msg
字段中,但前者似乎是主要顯示在日志控制台中並由 stackdriver 用於索引錯誤的消息。
這意味着當通過控制台瀏覽日志和錯誤時,我只看到堆棧跟蹤,沒有任何相關錯誤字符串的指示。
棘手的是我不知道這個“問題”是雲端還是 zapp 端。 我花了一些時間在 Zapp 中四處尋找無濟於事,並且沒有想法。
默認情況下,zap將消息放在msg
鍵下,stacktrace在stacktrace
下,並將日志行作為json打印到stdout。 您只需在本地運行二進制文件,就能看到實際的效果。
您的日志記錄系統大概在打印這些日志行時對其進行處理。 它將讀取它們,解析它們,並可能進行一些重組或添加一些元數據,然后將它們發送到其他地方以進行保存或更多處理。
由於zap很有可能按預期工作,因此您需要查看處理日志的系統。 期望他們看起來如何? 它對任何特定的鍵都有特殊的規則嗎? 會自己注入任何密鑰嗎?
請注意,您可以將zap配置為對其所有標准字段使用不同的鍵。
要在 GCP 上正確有效地記錄,首先,您必須使用Logging 的 LogEntry設置適當的 Zap 鍵
如果您正在尋找一個工作示例,我在這里編寫一個簡單的 Zap 配置: https://github.com/uber-go/zap/discussions/1110#discussioncomment-2955566
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.