Arm1.ru

Простой console.log с выводом файла и номера строки в Node.js

Пока кодю на Node.js нужно постоянно что-то выводить в консоль. Например, ошибки. Но для большей информативности удобнее знать, где именно ошибка выводится. Тем более, что пока кодил под iOS такой удобный макрос всегда был под рукой, а с Node.js пришлось погуглить и поковыряться, т.к. многие примеры со Stack Overflow просто падали на последней версии Node.js 5.10.0. Падали из-за использования в них 
Error.captureStackTrace(err, arguments.callee), а сейчас уже нужно использовать NFE.

В итоге сделал то, что хотел. Оставлю тут как шпаргалку.

npm install colors --save

Файл logger.js:

'use strict';

let colors = require('colors');
colors.enabled = true;

exports.p = function logger(somethingForPrint) {
  somethingForPrint = somethingForPrint || '';
  const originalPrepareStackTrace = Error.prepareStackTrace;

  Error.prepareStackTrace = (error, stack) => { return stack; };

  let e = new Error;
  Error.captureStackTrace(e, logger);

  const stack = e.stack;
  const filename = stack[0].getFileName().split('/').reverse()[0];
  const trace = filename + ':' + stack[0].getLineNumber() + " " + colors.bold.black('%s') + "\n";

  Error.prepareStackTrace = originalPrepareStackTrace;

  console.log(trace, somethingForPrint);
};

Использовать:

const logger = require('../utils/logger');
logger.p('something happened');
// file.js:401 something happened

keyboard_return back