ruby - 使用 Ruby 的记录器让错误转到标准错误,但其他消息到文件/标准输出?

标签 ruby logging command-line

我想在命令行应用程序中使用 Ruby 的记录器;它胜过 puts 并具有很好的日志记录灵 active 。

我想要的一件事是能够让错误/致命消息转到标准错误(按照惯例)除了记录器消息配置的位置。

logger = Logger.new(some_file)

logger.debug("This goes to some_file, if debug is set")
logger.info("This goes to some_file, if info is set")
logger.error("This goes to some_file, AND stderr")

我完成此操作的一种方法是破解格式化程序:

logger.formatter = Proc.new do |severity,time,progname,msg|
  message = format_message(severity,time,progname,msg)
  if severity == ERROR
    $stderr.puts message
  end
  message
end

这看起来很老套。另一种方法可能是创建一个 Logger,代理它对底层真实 logger 的调用,但拦截错误消息。

有人这样做过,是否已经有人这样做了?

最佳答案

Anyone done this, and is there maybe something already that does this?

Ruby 很酷、灵活、强大等等。仅仅有了这些猴子修补的东西和打开一个类并添加方法的能力,就很容易忘记普通的旧继承......

class CopyLogger < Logger
  def error message
    # Print to standard error...
    $stderr.puts message
    # ...*and* to wherever you specified as well
    super message
  end
end

logger = CopyLogger.new(some_file)
# ...

您可以将其他参数放入新类的构造函数中,例如发送消息所需的严重性等。

关于ruby - 使用 Ruby 的记录器让错误转到标准错误,但其他消息到文件/标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962043/

相关文章:

ruby - 如何提高将文件转换为哈希数组的过程性能?

ruby - AWS 上远程机器上的进程计数

powershell - 如何使用 PowerShell 创建快捷方式

java - 是否可以在命令行上配置 logback 记录器级别?

windows - if 条件下的批处理文件多个操作

java - 第三方库的 NoClassDefFoundError

ruby-on-rails - 任何调试 RSpec 请求规范的方法?

ruby - 如何在 Shoes 中制作一个简单的文本编辑应用程序?

ios - 需要修复崩溃 : thunk for @escaping @callee_guaranteed () -> () + 28 (<compiler-generated>:0) 的错误

elasticsearch - Filebeat可以用空格来剖析日志行吗?