我为控制台日志记录创建了一个包装器。我无法让它显示调用包装函数的记录行号。我已经看过其他帖子来处理这个问题,但我似乎无法得到他们提到的内容。它们基本上将console.log绑定到外部函数,但我需要在使用之前进行其他工作。
我的设置可以吗?
var logger = (function (window, console) {
// logger object
function logger() {
// use to initialize the logger
function init() {
fixConsole();
}
// fix missing console
function fixConsole() {
var logmethod;
var noop = function () { };
var logmethods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeStamp', 'trace', 'warn'
];
var length = logmethods.length;
console = (window.console = window.console || {});
while (length--) {
logmethod = logmethods[length];
// Only stub undefined methods.
if (!console[logmethod]) {
console[logmethod] = noop;
}
}
}
// initializing the logger
init();
}
// logging methods
logger.prototype = {
info: function (msg, title) {
if (title)
console.log(title + ": " + msg);
else
console.log(msg);
}
}
// create logger
function _create() {
// create logger
var log = new logger();
// return logger
return log;
}
// exposed functions
return {
create: _create
}
})(window, console);
var log = logger.create();
log.info('Hello, I am trying to get the logger to log under the line number info is used on.');
log.info('For instance I want line number 75 to show.');

<h1> Press F12 and look at the console to see</h1>
&#13;
答案 0 :(得分:0)
我不确定你想要什么。
但是如果你想获得调用它的正确行号,也许你需要追踪堆栈。
尝试console.trace()
功能。
// 2016-6-24更新
我最近遇到了同样的问题,我发现你能找到正确行号的唯一方法是在正确的地方调用记录功能,你永远无法通过调用获得正确的号码另一个帮助您进行日志记录的功能。
你不能以这种方式做任何事情,但不知怎的,你可以做一些事情来获得一个新的记录器然后直接调用它(就像你说的那样,使用.bind
)。
这就是我们在项目中所做的事情,在我们的例子中,我们需要将许多信息包装到我们所有的console.log中,并且所有信息只能由req
对象访问。 (快递中)
所以我们写一个中间件来帮助。
export default function logFactory() {
return (req, res, next) => {
function getLogger(type = 'log', ...args) {
let user = 'unknown';
try {
user = req.session.cas.user;
} catch (e) {
}
if (!console[type]) {
console.error('invalid console type', type);
}
return console[type].bind(console[type], `${req.sn}|${user}|${req.ip}|`, ...args);
}
req.getLogger = getLogger;
req.log = {
debug: getLogger('log'),
info: getLogger('log'),
log: getLogger('log'),
warn: getLogger('warn'),
error: getLogger('error')
};
}
}
然后我们可以使用我们需要的所有信息来执行console.log并通过调用req.log.info('Any business infos here')
获取正确的行号。
这就是我们通过使用winston获取日志文件的内容。
2016-06-24 17:47:52|4497|DEBUG|RequestUtils.js:256|0e84f1c3-d5b7-4578-9b83-f03fe9951fb1| unknown| 10.240.138.19| Receiving response from POST /statics/add_pv_uv?portal_auth_key=af27c0bc-cc04-4821-a4de-cbb93c0ed19f 200 60ms.
答案 1 :(得分:0)
准确地说我做了什么来获取错误号码,包括抓取它所需的正则表达式。
var err = getErrorObject();
var caller_line = err.stack.split("\n")[4];
var index = caller_line.indexOf("at ");
var clean = caller_line.slice(index+2, caller_line.length);
var number = clean.match(/(?!:)\d*(?=\:)/g);
console.log(number[0]);