Ruby的进入/退出跟踪 - 可以做得更好吗?

时间:2015-07-31 09:56:28

标签: c++ ruby logging

在为C ++编写日志包时,我还为程序员提供了一种方法来简单地记录函数的进入和退出。用法示例:

// C++
int myfunc(int status) {
  FTRACE("status=",status)
  ...
}

这会生成类似于

的日志消息
ENTRY myfunc status=45
...
EXIT myfunc

该实现使用C ++宏(获取函数名称)并在堆栈上创建了一个特殊的跟踪对象,然后析构函数将生成EXIT消息。

我想知道我是否可以在Ruby中做类似的事情。

这是我实施的内容(但我并不完全满意):

def ftrace(*args)
    caller()[0] =~ /`(.+)'/
    calling_method = $1 # || '???'
    puts "ENTRY #{calling_method} #{args.join(' ')}"
    begin
      yield(*args) if block_given?
    rescue Exception => e
      puts "EXIT #{calling_method} by exception"
      raise e
    end
    puts "EXIT #{calling_method}"
end

(当然在实际应用中,我不会使用' puts'进行日志记录,但会调用我的日志包。)

此代码将使用如下:

def myfunc(foo,bar,baz)
    ftrace("foo =",foo) {
      ...
    }
end

这样可行,但需要额外的块是很难看的。有没有更好的方法呢?

0 个答案:

没有答案