我正在创建应该在 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/