Node.js 修改发送给节点检查器的日志消息

Node.js 修改发送给节点检查器的日志消息,node.js,google-chrome-devtools,Node.js,Google Chrome Devtools,是否可以截获和修改发送给已连接节点检查器(即chrome的devTools)的消息/WebSocket(console.log/errorcalls) 其想法是将更多的内容记录到节点检查器,而不是将简单的消息记录到基本tty。此外,devTools不支持tty颜色转义码(例如,从粉笔包中),反之亦然,tty不支持devTools的控制台.log(“%c”,“color:red”)样式 或者,是否可以列出连接到当前节点进程的websocket客户端,以查看是否连接了devTools检查器,从而假设

是否可以截获和修改发送给已连接节点检查器(即chrome的devTools)的消息/WebSocket(
console.log/error
calls)

其想法是将更多的内容记录到节点检查器,而不是将简单的消息记录到基本tty。此外,devTools不支持tty颜色转义码(例如,从
粉笔
包中),反之亦然,tty不支持devTools的
控制台.log(“%c”,“color:red”)
样式


或者,是否可以列出连接到当前节点进程的websocket客户端,以查看是否连接了devTools检查器,从而假设我们正在使用该检查器进行调试,以便我们可以以不同的方式登录<代码>http://localhost:9229/json/list没有多大用处(如果应该的话)。

我们可以利用
console.log/error
使用
process.stdout
写入终端的事实。因此,如果我们只想向检查器发送消息,而不想将其写入终端,我们可以通过覆盖它来临时禁用stdout:

// inspector-only loggers
// -------------------------------------------------------------------------

const _stdoutWrite = process.stdout.write;
const _stderrWrite = process.stderr.write;

console.inspector = {};

[ "log", "warn", "error", "info" ].forEach( method => {

    const origLogger = console[method].bind( console );

    console.inspector[method] = ( ...args ) => {

        process.stdout.write = () => {};
        process.stderr.write = () => {};
        origLogger( ...args );
        process.stdout.write = _stdoutWrite;
        process.stderr.write = _stderrWrite;
    };    
});
同样,如果我们只想登录到终端而不想登录到inspector,我们可以直接使用
process.stdout

// terminal-only logger
// -------------------------------------------------------------------------

console.tty = ( ...args ) => {
    args = args.reduce((a, b) => String(a) + " " + String(b), "" ).trim();
    process.stdout.write( args + "\n" );
}