Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 需要参考$log.log呼叫线路号码_Logging_Angularjs_Console - Fatal编程技术网

Logging 需要参考$log.log呼叫线路号码

Logging 需要参考$log.log呼叫线路号码,logging,angularjs,console,Logging,Angularjs,Console,当我使用angular$log服务时,控制台中的所有行都会显示对angular.js:5687的引用,而不是我调用$log.log函数的行 如何获取对调用$log的行的引用?另外,我有自己的服务,它围绕$log展开,我如何将调用引用到我的服务而不是$log 例如,在Logger.js中: 1)角度。模块('MyApp')。工厂('Logger',函数($log){ 2) 返回{log:function(msg){$log.log(msg);}; 3) }); 在SomeCtrl.js中 1)角

当我使用angular$log服务时,控制台中的所有行都会显示对angular.js:5687的引用,而不是我调用$log.log函数的行

如何获取对调用$log的行的引用?另外,我有自己的服务,它围绕$log展开,我如何将调用引用到我的服务而不是$log

例如,在Logger.js中:

1)角度。模块('MyApp')。工厂('Logger',函数($log){
2) 返回{log:function(msg){$log.log(msg);};
3) });
SomeCtrl.js中

1)角度。模块('MyApp')。控制器('SomeCtrl',函数($scope,$log,Logger){
...
10) $log.log('Hi from$log');//引用SomeCtrl.js:10
...
25)Logger.log('Hi from Logger');//引用SomeCtrl.js:25

由于我假设您只在开发中登录,并且与大多数开发人员一样,您在Chrome中开发,因此您可以向全局范围添加一个属性,如下所示:

通过

现在,您可以在代码中的任何位置使用
\u line

编辑:您似乎无法从调用堆栈中获取文件名。如果您正在编写干净的JavaScript,每个文件都应该有自己的作用域,您可以在其中定义
var filename='test.js';
,因此您的文件可能如下所示:

在某个地方全局定义:

Object.defineProperty(window, '__prevLine', {
    get: function () {
        console.log('__line', __stack);
        return __stack[2].getLineNumber();
    }
});

function log(s) {
    console.log(s, __prevLine)
}
以及您的实施:

(function () {
    var _scriptName = 'test.js';

    // ... lots of code

    log('something happened', _scriptName);
}());
下面是一把小提琴,它展示了这个想法:


感谢@Langdon为我指明了正确的方向

[注意]此解决方案仅适用于Chrome。有关更多信息,请查看:

以下是我实施的变通方法:

Object.defineProperty(窗口“\uu堆栈”{
get:function(){
var orig=Error.prepareStackTrace;
Error.prepareStackTrace=函数(\ux,堆栈){
返回栈;
};
var err=新错误;
Error.captureStackTrace(err,arguments.callee);
var stack=err.stack;
Error.prepareStackTrace=orig;
返回栈;
}
});
Logger.log=函数(msg){
变量堆栈=_u堆栈;
var link=stack[1]。getFileName()+':'+stack[1]。getLineNumber();
console.groupCollapsed(“%c”+msg,“字体重量:正常;”);
$log.log(link);//或console.log(link),如果您不使用angular。
console.groupEnd();
};

[注]在chrome开发工具控制台中,我不知道如何覆盖右侧给出的链接。我已经查找了相关文档,但没有找到任何内容。如果您发现了,请告诉我,因为这样看起来会更整洁。

您好,感谢您提供的详细答案。在您的示例中,我可以看到行号被20你知道为什么吗?这是JSFIDLE的HTML,查看源代码(点击右边控制台中的“fiddle.jshell.net:43”)。
(function () {
    var _scriptName = 'test.js';

    // ... lots of code

    log('something happened', _scriptName);
}());