温斯顿:尝试在没有传输的情况下写入日志 - 使用默认记录器

Posted

技术标签:

【中文标题】温斯顿:尝试在没有传输的情况下写入日志 - 使用默认记录器【英文标题】:winston: Attempt to write logs with no transports - using default logger 【发布时间】:2019-01-31 16:25:24 【问题描述】:

我按照教程在我的 express 应用程序中设置了 winston (2.x) 默认记录器。更新到当前版本的 winston (3.0.0) 时,我在添加传输时遇到问题。我已关注latest docs,但我仍然在控制台中收到通知,并且根本没有创建任何日志文件:

[winston] 尝试在没有传输的情况下写入日志

logging.js

const winston = require('winston');

module.exports = function () 

  const files = new winston.transports.File( filename: 'logfile.log' );
  const myconsole = new winston.transports.Console();

  winston.add(myconsole);
  winston.add(files);


index.js

const winston = require('winston');
...

require('./logging');
winston.info("Give some info");

[winston] 尝试在没有传输的情况下写入日志 "message":"提供一些信息","level":"info"

我做错了什么?

【问题讨论】:

【参考方案1】:

在winston 3 中,您需要创建一个logger 对象,然后将transports 添加到它。

Winston 3 有很多examples,但要适应readme,请执行以下操作:

const logger = winston.createLogger(
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File( filename: 'logfile.log' )
  ]
);

logger.info('it works!!');

【讨论】:

感谢您澄清winston.createLogger 的用法。自述文件指出使用“您自己的记录器”作为推荐方式。不过,我宁愿使用readme 中也列出的“默认记录器”。不幸的是,当使用winston.configure() 时,控制台中的通知仍然与我原来的问题中描述的相同。 这可能是一个值得打开 GH 问题的错误。 3.0 版本仍有一些问题正在处理中,这可能就是其中之一。【参考方案2】:

如果您想在 winston v3 中使用默认记录器,那么您只需将这段代码添加到您的主文件中

const winston = require('winston')

winston.add(new winston.transports.File( filename: 'logfile.log' ))

【讨论】:

希望它对最近可能遇到此错误的新人有所帮助【参考方案3】:

我也有类似的问题。如果我没记错的话,我必须在我的 index.js 中将要求作为函数调用。

require('./logging')();

【讨论】:

以上是关于温斯顿:尝试在没有传输的情况下写入日志 - 使用默认记录器的主要内容,如果未能解决你的问题,请参考以下文章

温斯顿将颜色格式化程序保存在文本中,如何删除它但仍显示颜色?

logging模块介绍

Log4j - 如何在没有其他详细信息的情况下仅将我的消息日志写入文件

如何使用日志记录 Python 模块写入文件?

将数据从 MySQL 二进制日志流式传输到 Kinesis

温斯顿日志到文件不起作用