相关疑难解决方法(0)

console.log的正确包装器,具有正确的行号?

我现在正在开发一个应用程序,并放置一个全局isDebug开关.我想换行console.log以方便使用.

//isDebug controls the entire site.
var isDebug = true;

//debug.js
function debug(msg, level){
    var Global = this;
    if(!(Global.isDebug && Global.console && Global.console.log)){
        return;
    }
    level = level||'info';
    Global.console.log(level + ': '+ msg);
}

//main.js
debug('Here is a msg.');
Run Code Online (Sandbox Code Playgroud)

然后我在Firefox控制台中得到了这个结果.

info: Here is a msg.                       debug.js (line 8)
Run Code Online (Sandbox Code Playgroud)

如果我想用debug()被调用的行号记录,info: Here is a msg. main.js (line 2)怎么办?

javascript

119
推荐指数
11
解决办法
6万
查看次数

chrome console.log的别名

我想知道为什么以下代码在Google Chrome中不起作用:

// creates a xss console log

var cl = ( typeof( console ) != 'undefined' ) ? console.log : alert;
cl('teste');
Run Code Online (Sandbox Code Playgroud)

输出:未捕获TypeError:非法调用

谢谢.

javascript google-chrome exception

22
推荐指数
2
解决办法
5783
查看次数

如何扩展可以接受args的console.log

我一直在努力扩展console.log以制作一个彩色的,以保持堆栈跟踪到它被调用的位置。我尝试了一些解决方案,但最终达到了这一点:

export const colorizedLog = (
  text: string,
  status: keyof typeof ColorStatus = "dark",
  ...args: any
) =>
  console.log.bind(
    console,
    `%c ${text}`,
    `font-weight:bold; color: ${ColorStatus[status]}`,
    ...args
  );
Run Code Online (Sandbox Code Playgroud)

有了这个小binding,我们将能够保留堆栈跟踪,但这里的问题是我们必须在最后使用它并添加一个烦人的额外内容(),因为返回值是函数本身,它是 的结果bind

 colorizedLog(
    "Title:",
    "info",
    "This is a working example")();
Run Code Online (Sandbox Code Playgroud)

我阅读过的其他主要资源如下:

  1. 扩展 console.log
  2. 使用 babel-kent.c dodds 的宏
  3. Webpack 定义插件

const colorizedLog = (text, color= "#40a7e3", ...args) =>
  console.log.bind(
    console,
    `%c ${text}`,
    `font-weight:bold; color:${color}`,
    ...args
  );
colorizedLog("Title:", "#40a7e3", "This is a working example")();
Run Code Online (Sandbox Code Playgroud)

更新:堆栈跟踪 …

javascript bind javascript-debugger typescript console.log

7
推荐指数
1
解决办法
401
查看次数

javascript:控制台日志使用父作用域

是否可以使用一些javascript技巧来告诉console.log它应该输出哪个行号?

假设,我们通过以下简单示例:

function Logger () {
    this.debug = function(msg) {
        // do some stuff with msg
        console.log(msg);
    };
}

var log = new Logger();
log.debug("Hello");
Run Code Online (Sandbox Code Playgroud)

如果您打开该页面,Chrome会显示以下内容:

在此输入图像描述

这表示消息已记录,main.js:4但我真正想要的是它显示的内容main.js:9.因为第9行是调用记录器的地方.对于这个简单的情况,它没有太大的区别,但是当Logger在一个单独的文件中时,它总是显示logger.js而不是调用记录器的类.

Logger类应该使用记录的消息做一些额外的事情(例如将其发送到服务器),因此我不能只使用this.debug = console.log.

编辑:

已经有一些类似的问题了,但是所有这些问题只是在输出中添加了一行,这是不可点击的,无法跳转到相应的行:

javascript logging

5
推荐指数
1
解决办法
929
查看次数