加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Ruby的Logger有错误转到标准错误,但其他消息转到文件/ stdou

发布时间:2020-12-17 02:28:25 所属栏目:百科 来源:网络整理
导读:我想在命令行应用程序中使用 Ruby的记录器;它击败了put并具有良好的记录事物的灵活性. 我想要的一件事是能够将错误/致命消息转发到标准错误(按照惯例)以及记录器的消息配置去的地方. logger = Logger.new(some_file)logger.debug("This goes to some_file,if
我想在命令行应用程序中使用 Ruby的记录器;它击败了put并具有良好的记录事物的灵活性.

我想要的一件事是能够将错误/致命消息转发到标准错误(按照惯例)以及记录器的消息配置去的地方.

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,msg)
  if severity == ERROR
    $stderr.puts message
  end
  message
end

这看起来很丑陋.另一种方法可能是创建一个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)
# ...

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读