18

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

4

4 回答 4

39

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

$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
于 2010-03-19T20:36:54.837 回答
13

尝试

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

恢复:

$stdout = STDOUT
于 2008-10-22T04:55:36.820 回答
13

我应该推荐使用 ruby​​ 记录器,它比 puts 更好,您可以有多个可以打开/关闭的日志级别:调试、警告、信息、错误等。

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

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

#!/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"
于 2008-10-22T06:26:33.190 回答
0

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

def puts(message)
   #write message to file
end
于 2014-03-24T18:05:00.157 回答