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

时间:2008-10-22 04:46:53

标签: ruby daemon

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

4 个答案:

答案 0 :(得分:38)

如果您需要捕获STDERR和STDOUT并且不想求助于记录,以下是一个改编自this post的简单解决方案:

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

答案 1 :(得分:13)

我应该建议使用ruby logger,它比puts更好,你可以有多个日志级别可以打开/关闭:debug,warn,info,error等。

 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"

答案 2 :(得分:11)

尝试

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

要恢复:

$stdout = STDOUT

答案 3 :(得分:0)

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

def puts(message)
   #write message to file
end