我可以在Heroku使用Winston Logger吗

icomxhvb  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(120)

我在我的开发机器上用Node.js服务器设置了一个Winston日志记录器。根据dbState,我更改了日志文件的名称:

const { createLogger, transports, format } = require('winston');
const keys = require('../config/keys');

const dbState = keys.db.state;

const customFormat = format.combine(format.timestamp(), format.printf((info) => `${info.timestamp} [${info.level.padEnd()}]: ${info.message}`));

const logger = createLogger({
  format: customFormat,

  transports: [
    new transports.File({ filename: `${dbState}-error.log`, level: 'error' }),
    // After it reaches 10MB, it will create a new file and start writing to that
    new transports.File({ filename: `${dbState}-combined.log`, maxsize: 10000000 }),
  ],
});

logger.stream = {
  write(message, _encoding) {
    console.log(message.trim());
    logger.info(message.trim());
  },
};

module.exports = logger;

我现在已经把这个更新推到Heroku了,那里的日志文件可能正在增加。是否有访问此日志文件的方法?

ekqde3dh

ekqde3dh1#

您可以使用Winston,但要避免其文件传输。基于文件的日志记录是Heroku上的一个反模式:

  • 对文件系统的任何更改(例如日志文件)由于其临时文件系统而在dyno重新启动时丢失
  • Dynos频繁且不可预测地重新启动:

所有的dynos都会发生循环,包括一次性的dynos,所以dynos最多运行24小时+216分钟。

  • 一旦您希望通过添加更多dynos进行水平缩放,则会中断对本地文件的日志记录

Heroku treats logs as event streams,所以考虑使用Winston的Console传输。这应该会使所有dynos的日志显示在标准事件流中。
如果你愿意,你可以使用一个日志插件,如Logtail或Papertrail来查询你的日志下游。

s6fujrry

s6fujrry2#

是的,您可以通过命令行工具访问Heroku日志文件。

heroku login
heroku run bash -a APPNAME

一旦你有一个会话运行,你应该能够运行lscat,因为你想读取文件名。此外,一旦你完成了,一定要exit

相关问题