我想在命令行应用程序中使用 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/