gpt4 book ai didi

node.js - 在 node.js 中捕获 console.log?

转载 作者:IT老高 更新时间:2023-10-28 23:06:46 24 4
gpt4 key购买 nike

有没有办法可以捕获由 node.js 中的 console.log(...) 导致的最终控制台输出,以防止在单元测试模块时阻塞终端?

谢谢

最佳答案

更好的方法可能是直接连接您需要捕获数据的输出,因为如果某些模块使用 process.stdout.write('foo') 直接写入标准输出,则使用 Linus 方法> 例如,它不会被捕获。

var logs = [],

hook_stream = function(_stream, fn) {
// Reference default write method
var old_write = _stream.write;
// _stream now write with our shiny function
_stream.write = fn;

return function() {
// reset to the default write method
_stream.write = old_write;
};
},

// hook up standard output
unhook_stdout = hook_stream(process.stdout, function(string, encoding, fd) {
logs.push(string);
});

// goes to our custom write method
console.log('foo');
console.log('bar');

unhook_stdout();

console.log('Not hooked anymore.');

// Now do what you want with logs stored by the hook
logs.forEach(function(_log) {
console.log('logged: ' + _log);
});

编辑

console.log() 以换行符结束它的输出,你可能想去掉它,所以你最好写:

_stream.write = function(string, encoding, fd) {
var new_str = string.replace(/\n$/, '');
fn(new_str, encoding, fd);
};

编辑

在任何对象的任何方法上执行此操作的改进的通用方法,支持异步 See the gist .

关于node.js - 在 node.js 中捕获 console.log?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9609393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com