ruby-on-rails - 我应该如何在对调用代码的最小假设的情况下登录 ruby
问题描述
在 java/jvm 中,我们有 slf4j,它可以被包含在内,而不需要对日志实现做任何假设。我怎样才能在红宝石库/宝石中实现类似的东西?
解决方案
在各种 ruby 记录器实现中有一个非常常见的模式来模仿标准库Logger的方法接口,即
- logger 对象响应方法
debug
,info
,warn
,error
,fatal
您可以在其中传递包含日志消息的字符串。许多记录器实现还允许传递一个块(返回日志消息)而不是实际的字符串 - 您通常还有一种
add
方法可以传递数字日志严重性和日志消息。
在您的代码中,您通常可以期望所有记录器实现都至少实现此接口。然后,您可以允许您的代码的用户提供他们自己的logger
对象(应该实现这些方法),然后您可以使用这些对象。这种模式称为依赖注入
通常,在 Ruby 中,您不关心给定对象的实际类型。您只是假设这是对发送给它的消息的响应(“方法调用”)。因此,您不需要关心特定的记录器实现,而只需关心它实现了预期的接口。在 Ruby 中,这通常称为鸭子类型。
推荐阅读
- python-3.x - FileNotFoundError 长文件路径 python - 文件路径超过 255 个字符
- docker - 找不到 docker 运行时问题文件
- python - tf.gather 在使用自定义 softmax_loss 函数时超出范围,即使它不应该
- spring-data-jdbc - 如何使用@Query 查询多个列但不是所有列,但仍使用域数据模型与 Spring Data JDBC 进行映射?
- excel - 桌子自动调节,可以吗?
- c++ - 调用 QDataStream::writeRawData 后 QDataStream 为空
- python - 在使用 DeleteView 时在 url 中使用两个参数
- java - 在java中是否有任何函数可以在索引i和索引j(包括两者)之间的数组中执行循环左移
- aws-api-gateway - 使用 API Gateway REST API 和 Amplify 自动签署请求
- docker - Hyperledger Fabric:如何修剪日志?