我正在使用daemons gem在Ruby中创建守护进程。我希望将守护进程的输出添加到日志文件中。我想知道将控制台puts
重定向到日志文件的最简单方法是什么。
$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
恢复:
$stdout = STDOUT
ruby myscript.rb | tee my.log
。 - wim$stdout.reopen("my.log", "w")
破坏了我的Rails控制台(我不得不杀死进程)。正在寻找其他解决方案。 - Alex C尝试
$stdout = File.new( '/tmp/output', 'w' )
恢复:
$stdout = STDOUT
我建议使用Ruby的日志记录器(logger),它比puts更好,你可以拥有多个日志级别,可以随时打开/关闭:debug、warn、info、error等。
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"
或者你可以重新定义 puts
命令?但这只能在单个文件/类中起作用。
def puts(message)
#write message to file
end
LOGGER ||= Logger.new("| tee #{settings.root}/log/migration_script_logger.log", "monthly")
,它会同时完成两个任务。 - vs4vijay