是否可以拦截和修改发送给连接节点检查员的消息/ websockets(console.log/error
调用)(即chrome的devTools)?
想法是将更多内容记录到节点检查员,而不是将基本消息记录到基本tty。此外,devTools不支持tty颜色转义码(例如来自chalk
包),反之亦然,它不支持devTools' console.log('%c', 'color: red')
个样式。
或者,是否可以列出连接到当前节点进程的websocket客户端以查看是否已连接devTools检查器,因此假设我们使用 进行调试,因此我们可以以不同方式进行日志记录? http://localhost:9229/json/list
并不是很有用(如果它应该是这样的话)。
答案 0 :(得分:0)
我们可以利用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;
};
});
同样,如果我们只想登录终端而不登录检查员,我们可以直接使用process.stdout
:
// terminal-only logger
// -------------------------------------------------------------------------
console.tty = ( ...args ) => {
args = args.reduce((a, b) => String(a) + " " + String(b), "" ).trim();
process.stdout.write( args + "\n" );
}