如何在使用s3-streamlogger节点模块重新启动服务器后将内容附加到日志文件中并上传到s3?

时间:2015-08-10 05:06:29

标签: node.js amazon-s3 winston

我使用winston节点模块(https://www.npmjs.com/package/winston)来生成日志文件,使用s3-streamlogger模块(https://www.npmjs.com/package/s3-streamlogger)将其保存到s3服务器中。

var s3_stream = new S3StreamLogger({
  bucket: bucket,
  access_key_id: accessKeyId,
  secret_access_key: secretAccessKey,
  name_format: "mylog.log"
});

var logger = new(winston.Logger)({
  transports: [
    new (winston.transports.Console)(),
    new (winston.transports.File)({ stream: s3_stream })
  ]
});

function formatArgs(args){
  return [util.format.apply(util.format, Array.prototype.slice.call(args))];
}
console.log = function(){
  logger.info.apply(logger, formatArgs(arguments));
};

我的问题是,每次重新启动服务器时,日志文件都会更新。我希望以前的日志应该是他们的日志文件,并且应该附加新的日志。但这不会发生。我尝试了很多东西,但没有什么对我有用。 任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

不幸的是s3-streamlogger不能做你想做的事情:由于s3的工作方式,它必须在每次更新时完全重新上传文件,所以当你的程序重新启动时,旧文件是完全的覆盖。

我建议您接受创建带时间戳名称的轮换日志文件,因为s3-streamlogger会提高效率(因为文件越大,每次重新上传它的效率就越低)。如果您使用name_format:'%Y-%m-%d-%H-%M-production-yourapp.log',则可以使用tails3查看s3-streamlogger创建的日志文件,就像它们是单个文件一样。