首页 > 解决方案 > 我应该如何在对调用代码的最小假设的情况下登录 ruby

问题描述

在 java/jvm 中,我们有 slf4j,它可以被包含在内,而不需要对日志实现做任何假设。我怎样才能在红宝石库/宝石中实现类似的东西?

标签: ruby-on-railsrubylogging

解决方案


在各种 ruby​​ 记录器实现中有一个非常常见的模式来模仿标准库Logger的方法接口,即

  • logger 对象响应方法debug, info, warn, errorfatal您可以在其中传递包含日志消息的字符串。许多记录器实现还允许传递一个块(返回日志消息)而不是实际的字符串
  • 您通常还有一种add方法可以传递数字日志严重性和日志消息。

在您的代码中,您通常可以期望所有记录器实现都至少实现此接口。然后,您可以允许您的代码的用户提供他们自己的logger对象(应该实现这些方法),然后您可以使用这些对象。这种模式称为依赖注入

通常,在 Ruby 中,您不关心给定对象的实际类型。您只是假设这是对发送给它的消息的响应(“方法调用”)。因此,您不需要关心特定的记录器实现,而只需关心它实现了预期的接口。在 Ruby 中,这通常称为鸭子类型


推荐阅读