【问题标题】:Winston Logger return exact logged stringWinston Logger 返回准确的记录字符串
【发布时间】:2019-09-23 20:25:39
【问题描述】:

我正在使用 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);

【问题讨论】:

  • 你到底想要什么?我真的不明白。也许你可以在createLogger选项对象中设置format: winston.format.json()属性
  • 基本上我希望我能得到winston写在日志中的准确值。如果winston 登录{"message":"New S3!","level":"info"},我希望可以将其存储到var loggedVal 变量中

标签: javascript node.js winston


【解决方案1】:

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

我们可以使用 there 描述的 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, ....);

【讨论】:

    【解决方案2】:

    Winston logger 的设计初衷不是为了实现您想要实现的目标,而且几乎没有任何用例可用于您想要实现的目标,因此我怀疑 winston 是否具备该功能。

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 2018-09-15
      • 2010-12-22
      • 2017-09-25
      • 1970-01-01
      • 2018-03-24
      • 2019-07-04
      • 2017-09-23
      • 2018-12-09
      相关资源
      最近更新 更多