kubernetes 允许在JSON记录器中使用"level"键

nbnkbykc  于 6个月前  发布在  Kubernetes
关注(0)|答案(5)|浏览(47)

问候维护者,

目前,没有办法以这种方式从component-base定义JSONLogger的LoggingConfiguration,使得它最终暴露带有"level"字段(值:"info","warn","error"等)的JSON日志,这在可观察性和将遥测数据转换出来方面(同时具有较低的基数)是日志的一个非常有用的属性。
这是因为component-base:

  • 被编程为省略LevelKey作为其默认的zapcore EncoderConfig(参考)
  • 被硬编码为始终遵循导致使用此默认EncoderConfig(参考)的代码路径

如果你在上述问题的最后一条评论中注意到(kubernetes-sigs/metrics-server#1426(评论)),我只是修复了一个我概括为以下的bug
那么如何解决呢?
最小的一个,但不是那么干净的一个:修改component-base的NewJSONLogger,使其默认的EncoderConfig也包含LevelKey,即在这里添加以下两行代码
LevelKey: "level",
EncodeLevel: zapcore.LowercaseLevelEncoder,
Working example
更大的、更干净且可扩展的一个:修改component-base,允许像metrics-server这样的客户端提供更精细的选项,例如为底层的JSON logger提供EncoderConfig,而不是直接使用nil(导致它强制使用默认的encoderconfig)
如果你认为这个问题值得解决,我很乐意考虑在我已经足够了解component-base的代码库的情况下对其进行更改。
感谢你的时间、耐心和努力维护这个有用的代码库<3

chhkpiq4

chhkpiq41#

/transfer-issue kubernetes

y53ybaqx

y53ybaqx2#

/triage accepted
/sig instrumentation
cc @pohly
voj3qocg

voj3qocg4#

请注意,go-logr和Kubernetes以及component-base只有两个日志级别:INFO(= logr.Logger.Info)和ERROR(= logr.Logger.Error)。我认为已经可以区分这两个级别,但我需要再确认一下。
如果你认为为你的用例添加一个显式字段是值得的,那么请随时提出一个PR。
让我们默认在Kubernetes中禁用它。我甚至不确定是否应该为Kubernetes添加一个单独的选项来启用它。

nxagd54h

nxagd54h5#

当然,我们可以在k8s中默认将其禁用。我个人认为只需为component-base的客户端(例如,在本问题中的metrics-server)提供一种明确请求启用“level”字段的方法。
让我尝试编写一个PR来尽可能简单地解决这个问题。

相关问题