Published on

error stack을 통해 호출한 함수이름 가져오기

Error.prototype.stack을 통해 호출한 함수이름을 찾을 수 있다.
다만 브라우저마다 출력방식이 다르고, 브라우저가 업데이트되면서 구현이 변경될 수 있는 점은 고려해야 한다.

function getCallerName(error: Error) {
  const callerStack = error.stack?.split('\n') || [];
  let caller;

  if (DeviceUtility.isAndroid()) {
    caller = callerStack[2]?.trim()?.split(' ')?.[1];
  } else {
    // Safari on iOS
    caller = callerStack[1]?.replace(/@/g, '');
  }

  if (ObjectUtility.isEmptyString(caller) || caller === 'eval') {
    return 'anonymous';
  }

  return caller;
}

function Logger() {
  const caller = getCallerName(new Error());
  console.log('caller : ', caller);
}

function FuncA() {
  Logger();
}

function FuncB() {
  Logger();
}

FuncA(); // caller : FuncA
FuncB(); // caller : FuncB