ruby-on-rails - Rails中如何判断日志设备的类型

标签 ruby-on-rails ruby logging terminal

我正在创建应该在 Rails 内部和外部运行的 gem。我不想重新发明轮子,因此我要么使用默认记录器,要么为 gem 的用户提供创建她自己的记录器的能力。

我有彩色原木。

自己创建日志设备,我可以很容易地检查它是否是一个tty:

@logger = Logger.new(name)
@colorize = (IO === name) && name.tty?

现在终端将接收彩色输出,其他一切都不会。这很好用。

想象一下,虽然我从 Rails 获得了一个 logger 的实例:

@logger = Kernel.const_defined?(Rails) ? Rails.logger : Logger.new(name)

确定它是否是 tty 的唯一方法看起来嗯...太丑了:

Rails.logger
     .instance_variable_get(:@logger)
     .instance_variable_get(:@log)
     .instance_variable_get(:@logdev)
     .instance_variable_get(:@dev)
     .tty?

我错过了什么吗?是否有更优雅的方式来了解 Rails 记录器是否将输出吐到终端?

最佳答案

也许您可以通过使用 config.colorize_logging 来依赖用户的选择来决定(在使用 Rails 时)?

关于ruby-on-rails - Rails中如何判断日志设备的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29454985/

相关文章:

Python 日志记录模块在 "add-on"属性上引发 KeyError 异常

ruby-on-rails - Rails 中的 Controller 不知道 "care"请求是如何执行的

iphone - 在新 iPhone 应用程序和新 Rails 3 后端之间移动对象图

javascript - 可以在条形图中合并 2 个条形图 (chart.js)

ruby - 有什么方法可以使用 capybara 单击 Flash 播放器中的元素吗?

ruby-on-rails - 从类方法调用实例方法

未生成 mysql-slow-log 文件

ruby-on-rails - 生产中的 bundler 不会忽略开发和测试 gem

ruby - 如何使用 Pry 测试类似过滤器的 Ruby 脚本?

python - 如何进行干净的日志记录,而不会使代码看起来很糟糕?