在java/jvm中,我们有slf4j,它可以在不做任何关于日志实现的假设的情况下被包含。如何在ruby库/gem中实现类似的功能?
在各种ruby日志记录器实现中有一个非常常见的模式来模拟标准库logger的方法接口,即
- 记录器对象响应
debug
,info
,warn
,error
,fatal
方法,其中您可以传递包含日志消息的字符串。许多日志记录器实现也允许传递一个块(它返回日志消息)而不是一个实际的字符串 - 你通常也有一个
add
方法,你可以传递一个数字日志严重性和日志消息。
在您的代码中,您通常可以期望所有日志记录器实现至少实现此接口。然后,您可以允许代码的用户提供他们自己的logger
对象(应该实现这些方法),然后您可以使用这些对象。这种模式叫做依赖注入
通常,在Ruby中,您不关心给定对象的实际类型。您只需假设它响应发送给它的消息(调用的方法)。因此,您不需要关心特定的日志记录器实现,只需要它实现预期的接口即可。在Ruby中,这通常被称为duck typing。