Brian M. Hunt Brian M. Hunt - 10 months ago 87
Javascript Question

Get name and line of calling function in node.js

How can one get the name and line of a function that called the current one? I would like to have a rudimentary debugging function like this (with npmlog defining


function debug() {
var callee, line;
/* MAGIC */
log.debug(callee + ":" + line, arguments)

When called from another function it would be something like this:

function hello() {
// outputs something like:
// "hello:2 'world!'"

For clarity, what I want is essentially analogous to this in Python:

import inspect
def caller():
return inspect.stack()[2][3]
// line no from getframeinfo().lineno

Is there a Node equivalent to accomplish this?

Joe Joe
Answer Source

Using info from here: Accessing line number in V8 JavaScript (Chrome & Node.js)

you can add some prototypes to provide access to this info from V8:

Object.defineProperty(global, '__stack', {
get: function() {
        var orig = Error.prepareStackTrace;
        Error.prepareStackTrace = function(_, stack) {
            return stack;
        var err = new Error;
        Error.captureStackTrace(err, arguments.callee);
        var stack = err.stack;
        Error.prepareStackTrace = orig;
        return stack;

Object.defineProperty(global, '__line', {
get: function() {
        return __stack[1].getLineNumber();

Object.defineProperty(global, '__function', {
get: function() {
        return __stack[1].getFunctionName();

function foo() {


Returns '28' and 'foo', respectively.