在为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
这样可行,但需要额外的块是很难看的。有没有更好的方法呢?