node.js - 如何在使用 s3-stream 记录器 Node 模块重新启动服务器后将内容附加到日志文件中并上传到 s3?

标签 node.js amazon-s3 winston

我正在使用 winston Node 模块(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));
};

我的问题是,每次重新启动服务器时,日志文件都会更新。我希望以前的日志应该是他们的日志文件,新日志应该附加在上面。但这并没有发生。我尝试了很多东西,但对我没有任何用处。 谁能帮帮我?

最佳答案

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

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

关于node.js - 如何在使用 s3-stream 记录器 Node 模块重新启动服务器后将内容附加到日志文件中并上传到 s3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31911949/

相关文章:

node.js - PM2 EPERM,调用初始化组不允许操作

javascript - 如何像 console.log 一样在 winston 中记录 JavaScript 对象和数组?

node.js - 在 node.js 中从 node-mongodb-native 获取 MongoDB 服务器版本

javascript - 如何从 getItem dynamoDB (JavaScript) 检索特定对象?

javascript - 如何从传递一些参数的 node.js 执行 .bat 文件?

amazon-web-services - 为什么 AWS Lambda 无法正确将图像上传到 S3?

amazon-s3 - 如何删除现有的 S3 事件通知?

java - 我的 s3 存储桶中的图像不会在浏览器中打开,它们只会下载

node.js - winston 和洛格利 仪表板上没有显示任何内容

node.js - 如何在 Nodejs 中为 Winston 记录器编写单元测试