将“puts”命令输出重定向到日志文件

我正在使用守护进程gem在Ruby中创建一个守护进程。 我想将守护进程的输出添加到日志文件中。 我想知道将puts从控制台重定向到日志文件的最简单方法是什么。

我应该建议使用ruby logger,它比puts更好,你可以有多个日志级别,你可以打开/关闭:调试,警告,信息,错误等。

  logger = Logger.new(STDOUT) logger = Logger.new("/var/log/my-daemon.log") 

我使用runit包来管理ruby服务,它有svlogd而不是将守护进程输出重定向到日志文件,这里是logger进程的运行脚本:

 #!/bin/sh set -e LOG=/var/log/my-daemon test -d "$LOG" || mkdir -p -m2750 "$LOG" && chown nobody:adm "$LOG" exec chpst -unobody svlogd -tt "$LOG" 

如果您需要同时捕获STDERR和STDOUT并且不想使用日志记录,则以下是从此post改编的简单解决方案:

 $stdout.reopen("my.log", "w") $stdout.sync = true $stderr.reopen($stdout) 

尝试

 $stdout = File.new( '/tmp/output', 'w' ) 

恢复:

 $stdout = STDOUT 

或者你可以重新定义puts命令? 可能只在单个文件/类中工作

 def puts(message) #write message to file end