问题标签 [go-zap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1918 浏览

go - 如何配置仅在错误级别写入输出的自定义 zap 记录器?

我正在尝试构建一个自定义记录器,它将日志消息保持在缓冲区中的错误级别以下,并且仅在遇到错误后才刷新缓冲区。

问题是我不知道在遇到错误时如何触发将日志刷新到输出(同步方法)。

下面的代码尝试这样做:

例如,执行时:

  • logger.Info("some Info message")此消息最终在 bufio.Writer 的缓冲区中,并且不显示 Info 消息

  • logger.Info("some Info message2")此消息最终在 bufio.Writer 的缓冲区中,并且不显示 Info 消息

  • logger.Error("some Error message") 仅当遇到错误记录时,必须将缓冲中的所有累积日志刷新到输出,根据上面的代码示例,它应该转到os.Stdout

预期输出:

注意:我试图实现的功能类似于Php Symfony 框架中的Fingers_crossed功能。

0 投票
2 回答
1240 浏览

go - Zap logger 源代码行

如何使用 zap 打印准确的源代码行。我创建了一个存储变量(zap logger)的包。该全局变量将在该包中的函数内部调用。问题是它没有打印实际的调用者,而是调用记录器在记录器包内调用内部函数的位置。这是我的代码:

为实际调用者打印源行值的解决方法是什么?

0 投票
2 回答
1115 浏览

go - 如何将 Sentry 与 go.uber.org/zap/zapcore 记录器一起使用

go.uber.org/zap/zapcore用于登录我的 Go 应用程序。

我也有 Sentry 项目并使用github.com/getsentry/raven-go.

我想将error级别及以上的日志发送到 Sentry。

例如,当在info级别登录时,logger.Info()我只想像往常一样记录它们,但如果是errorfatal记录,我需要将这些消息发送到 Sentry。我怎样才能做到这一点?

0 投票
1 回答
848 浏览

go - 如何将钩子添加到 zap 记录器中?

我尝试添加钩子,WithOptions但没有打印任何内容来捕获一些日志事件:

0 投票
1 回答
1698 浏览

go - 如何将“真实”堆栈跟踪放在“stacktrace”键下,而不是“msg”键下?

给定以下代码(从此处复制):

由于我们使用的是github.com/pkg/errors包,我知道要记录堆栈跟踪,只需使用sugar.Errorf("%+v", err)

问题是堆栈跟踪放在msg键下,而在下面的stacktrace是日志行的堆栈跟踪:

不是错误的堆栈跟踪:

问题:如何在stacktrace密钥下记录“真实”堆栈跟踪?

0 投票
1 回答
534 浏览

go - Uber-go/zap 和 kafka-go 比赛条件

我正在创建一个自定义记录器,我们可以在其中记录到 std out 和 std err,但也增加了记录到 kafka 的可能性(代码示例在这里:https ://github.com/roppa/kafka-go )。我们有多个主题,所以我们需要多个记录器,但是当我们使用多个记录器时,会发生一些奇怪的事情。当两个 kafka-go 设置都是异步的时,我没有收到消费者消息,当一个是异步的而另一个是同步的时,我们会得到如下信息:

更改同步会产生截然不同的效果。我对 Go 很陌生。

这是 main.go:

这是 logger/logger.go:

我将这些用于消费者:

这是我的 kafka docker-compose:

0 投票
1 回答
1895 浏览

go - 日志中的 Uber Zap 记录器函数名称

如何从 Uber Zap 日志中获取打印在日志中的函数名称?这是他们似乎添加了在日志中输出函数名称的功能的PR 请求。

我正在使用 golang 版本1.15和 go.uber.org/zap v1.16.0

这是我的代码:

这是我在添加/不添加AddCaller()选项的情况下得到的输出

我期待类似的东西

0 投票
0 回答
379 浏览

go - 在 Go 中使用 Uber-Zap 记录器将指定的日志发送到 Kafka 接收器

我正在尝试使用zap logger包来创建带有文件、控制台和 Kafka 接收器的核心。我有一些非常特定INFO级别的日志,我想将它们发送到 Kafka 主题以供下游消费者处理。但是,通过当前的实现,我INFO在 Kafka 主题中获得了所有级别的日志,甚至是我不想要的日志。

有没有办法使用一个通用的 zap 记录器对象来防止同一级别的不需要的日志不去任何一个特定的接收器?

下面是我用来创建单个记录器对象的函数。

我正在使用Sarama包来实现 Kafka 生产者。我还考虑过使用自定义日志记录级别。但是,zap v1.0 不支持它。

0 投票
1 回答
212 浏览

go - Zap logger 是否支持转义字符 '\n' 和 '\t' 在日志输出中打印新行或制表符

我正在使用 zap logger 的加糖记录器,我已经初始化了 zap 记录器,如下所示:

我使用的日志语句如下:

我得到以下输出:

但我期待输出如下:

请提供有关如何获得此输出的任何建议

0 投票
1 回答
586 浏览

go - 使用 zap logger 将 protobuf 消息正确记录为未转义的 JSON

我有一个 Go 项目,我在其中使用Zap结构化日志记录来记录结构的内容。这就是我初始化记录器的方式:

最初,我从我自己的带有 json 标签的结构开始,一切都很完美:

结果:

我现在切换到 protobuf 并且我正在努力实现相同的结果。最初,当使用 zap.Any() 时,我刚刚获得了“反射地图”版本:

我尝试使用 jsonpb marshaller 对对象进行编组,它在自身上生成了正确的输出,但是,当我在 中使用它时zap.String(),字符串被转义,所以我在每个引号前得到了一组额外的 '\'。由于稍后会处理日志,这会导致那里出现问题,因此我想避免它:

结果:

然后我尝试使用zap.Reflect()而不是zap.Any()最接近我需要的东西,除了枚举被呈现为它们的数值(初始解决方案没有枚举,因此在 pre-protobuf 解决方案中也不起作用):

结果:

到目前为止,我看到的唯一选择是编写自己的MarshalLogObject()函数:

但由于它是一个复杂的结构,我宁愿使用不易出错且维护繁重的解决方案。理想情况下,我会告诉 zap 以某种方式使用 jsonpb 编组器,但我不知道这是否可能。