Node.js自动记录元数据



我想创建一个Node.js日志装饰器(函数过滤器),其工作原理如下(伪代码警告):

logged = function(f) {
    return function() {
        log(f.file, f.line, f.class, f.name, arguments)
        return f.call(this, arguments)
    }
}

是否有访问上述信息的方法?我要做大量的日志记录,所以抛出一个假的Exception并读取跟踪可能是不可行的(或者是吗?)。

注意:这里的f.class是指保存prototype的函数的名称。此外,我使用coffee-script,如果它的问题

你不必把throw当作例外,var stack = new Error().stack就足够了。从这里可以解析出文件、行号和类名。但是问题是,它只跟踪函数调用,所以现在要获得修饰函数Error的适当信息,应该在函数或类的某个地方初始化。在decorator中这样做,您只能获得关于发生函数装饰的文件/linenumber的信息,而不是函数声明的位置。

function User(){}
User.prototype.foo = function(){};
User.stack_ = function(){
    return new Error().stack
};
// ...
function wrapp(Ctor, name){
    var stack = Ctor.stack_();
    var info  = parseStack(stack);
    var orig_ = Ctor.prototype[name];
    Ctor.prototype[name] = function(){
        console.log('Info:', info);
        return orig_.apply(this, arguments);
    };
}
function parseStack(stack){
    // implement better stacktrace parser
    return stack.split('n')[1];
}
// ...
wrapp(User, 'foo');
// ...
var user = new User;
user.foo();
// and you get smth. like
// Info: at Function.User.stack_ (filename:line:column)

我认为这是你能得到的最大值,你必须总是定义这个stack_函数

最新更新