首页 > 解决方案 > Winston Logger 返回准确的记录字符串

问题描述

我正在使用 Winston 为我的节点应用程序进行日志记录。我正在尝试准确获取 Winston 登录到日志文件中的值。在这种情况下,它将返回示例:-

{"message":"New S3!","level":"info"}

我已经测试过控制台记录函数并检查winston中的某些包函数,到目前为止找不到任何方法来返回它。

var logger = winston.createLogger({
	transports: [
		transport, //This is to upload to 
		new winston.transports.File(options.file), //Will log into file
		new winston.transports.Console(options.console) //Will log at console display
	]
});

var loggedVal = logger.info('New S3!');
console.log(loggedVal);

标签: javascriptnode.jswinston

解决方案


我在测试控制台传输的输出时遇到了同样的问题。所以该解决方案仅对 jest env 有效。

我们可以使用那里描述的 jest-mock-process 包 或创建简单的间谍

const mockStdoutWrite = jest.spyOn(process.stdout, 'write').mockImplementation(function () { return true; });
const mockStdout = jest.spyOn(console, 'log').mockImplementation(function () { });

logger.debug('Debug message');
expect(mockStdoutWrite).toHaveBeenNthCalledWith(1, ....);

推荐阅读