2011-02-10 92 views
4

我想在命令行应用程序中使用Ruby的记录器;它跳动了puts,并且具有很好的记录事物的灵活性。使用Ruby的记录器有错误转到标准错误,但其他消息到文件/标准输出?

我希望的一件事是能够将错误/致命消息转到标准错误(如惯例)另外将记录器消息配置到的位置。我做这个

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") 

一种方式是破解formatter

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,它将其调用代理到底层的实际记录器,但拦截错误消息。

任何人都这样做了,是否有可能已经有这样做?

回答

4

任何人都这样做了,有没有人可以做到这一点?

红宝石很酷,灵活,功能强大,而且东西。只是这些猴子打补丁的东西,才能打开一个类,并添加方法,它太容易忘记老式继承...

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) 
# ... 

你可以把额外的参数到您的新类的构造函数,例如作为发球消息的期望的严重性等。

0

我通常是tail开发时要监视的日志文件和put定制的,用户友好的信息给大众。