Golang Logger 多态性?

我们使用第三方库,它接受*log.Logger(stdlib Logger) 作为其 New 函数中的参数,但我们自己实现Logger。它与 stdlib Logger 具有相同的“接口”。

除了要求库所有者将参数类型更改为接口之外,是否有任何hack方法可以将我们自己的Logger实现传递给第三个库?


四季花海
浏览 120回答 1
1回答

慕姐4208626

如果他们的包采用实际的 *log.Logger,除了将 log.Logger 的输出设置为自定义编写器,您可以在其中拦截他们的日志语句,然后通过您的语句重新记录它们,否则您无法注入自己的记录器.但这将是次要的,因为您基本上会解析他们所有的日志语句,以便您可以重新登录。不确定 log.Logger 是否将日志消息写为对 Write 的一次调用。如果是这样,这很容易,因为您所做的就是为每次 Write 调用重新登录。您可能还想考虑寻找另一个库或分叉和更改该库,因为没有什么应该像那样真正依赖 log.Logger。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go