Winston: 添加文件传输功能以按日期拆分日志

创建于 2011-05-29  ·  12评论  ·  资料来源: winstonjs/winston

@indexzero -

向 File 传输添加一个可选的 API 参数,以便它可以按日期拆分日志文件,您感觉如何? 这个想法是,在每个新的一天,都会创建一个新的日志文件,Winston 将自动处理所有这些/知道要根据日期写入哪个日志文件。

feature request

最有用的评论

有此任务的标准工具时,无需使 winston 代码复杂化:Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)

所有12条评论

会接受这个补丁请求

凉爽的! 对 API 有什么建议吗? 我在想这样的事情:

           // Specify path option and default to spanning by day ( 24 hours in each file )
           new (winston.transports.File)({ path: './logs' })

但在允许自定义日期/时间过滤器方面可能有一些实用程序。

有此任务的标准工具时,无需使 winston 代码复杂化:Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)

@indexzero这个补丁还可以接受吗? 我知道这可以通过文件名选项实现,但我可以为此添加另一个选项。

每个实现日志轮换不是单个守护进程的任务。 这就是为什么我们有像 logrotate 这样的工具,就像@cemuzunlar所说的那样。

@cemuzunlar @Dieterbe

我同意,理想情况下,这不会是温斯顿的问题,但是

  • winston 确实在没有 logrotate 的 Windows 上运行,尽管在各种博客上进行了几次(看起来很虚弱)的简单尝试(以及一些使用 cygwin + 自编译 logrotate 的建议,但我怀疑这在理论上甚至是可能的,假设winston 保持文件打开以供写入,这严重限制了您可以在 Windows 上对该文件执行的操作)
  • winston 的文件传输已经进行了日志轮换,只是按文件大小而不是日期进行拆分。 它还删除旧文件,所以它是所有基本的日志轮换功能

我懂了...
大声思考:将日志轮换逻辑移动到一个单独的节点程序中,因此它是一个可重复使用的简单 logrotate 克隆,可以跨平台工作。

++1

虽然我也是 logrotate 的拥护者,但它并不是独自完成它的工作。 Logrotate 非常有用,因为它提供了一种方法来告诉程序是时候刷新和关闭它们的日志了。

文件传输有一个 _createStream.checkFile.createAndFlush 函数,乍一看它应该做适当的事情。 要将其用于 logrotate,请让您的节点程序捕获 SIGHUP 并访问此功能。 在我的日常工作之前我没有时间发布代码,但我今晚会尝试发布我的结果。

以这种方式响应 SIGHUP 应该可以传输到 windows,然后你在 windows 上使用的任何日志轮换(节点库或其他魔术)都留给读者作为练习。

如果其他人正在寻找这个:

感谢您的提示,@pccowboy。 我也是 logrotate 的忠实拥护者。 我不愿意对 node.js 服务(即 winston File maxsize 等)使用一种配置,对其他服务(nginx、redis 等)使用另一种配置(logrotate),并且更愿意对我的所有日​​志文件使用 logrotate。 我已经组合了一个简单的函数,它将监听 HUP 信号并重新打开日志文件 postrotate。

如果有机会,我会尝试以更简洁的方式重写它(即,作为文件传输的配置选项)并创建拉取请求。

https://gist.github.com/suprememoocow/5133080

由 #205 修复。

惊人的!

此页面是否有帮助?
0 / 5 - 0 等级