Ruby 守护进程日志轮换

Posted

技术标签:

【中文标题】Ruby 守护进程日志轮换【英文标题】:Ruby Daemons log rotation 【发布时间】:2011-07-25 17:42:59 【问题描述】:

当我为 Daemons (1.1.0) gem 设置日志记录参数时,我将如何实现与此行类似的行为?

logger = Logger.new('foo.log', 10, 1024000)

守护进程选项:

options = 
      :ARGV         => ['start'],
      :dir_mode     => :normal, 
      :dir          => log_dir,
      :multiple     => false,
      :ontop        => false
      :mode         => :exec,
      :backtrace    => true,
      :log_output   => true
    

【问题讨论】:

【参考方案1】:

很遗憾,Daemons gem 不使用 Logger。它将STDOUTSTDERR 直接重定向到一个文件。

您可以在此处查看重定向工作原理的详细信息: https://github.com/ghazel/daemons/blob/master/lib/daemons/daemonize.rb#L241-261

因此,如果您想进行日志文件轮换,则必须使用 logrotate 之类的东西并重新启动守护程序。

如果这是不可接受的,我建议像您在问题中提供的那样直接使用Logger

【讨论】:

以上是关于Ruby 守护进程日志轮换的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 守护进程 - 啥是监视器,它是如何工作的?

linux 如何将守护进程的日志写到自己指定的日志文件

导致 ActiveRecord 记录器 IOError 的 Ruby 守护进程

Ruby后台进程STDOUT为空

守护进程(setsidgetpgrpsetpgidgetpgid)以及系统日志(openlogsyslogcloselog)

探究守护进程及其错误日志处理