我正在使用daemons gem在Ruby中创建一个守护进程.我想将守护进程的输出添加到日志文件中.我想知道puts从控制台重定向到日志文件的最简单方法是什么.
Eri*_*ker 38
如果您需要同时捕获STDERR和STDOUT并且不想求助于记录,则以下是一个改编自此帖子的简单解决方案:
$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
Run Code Online (Sandbox Code Playgroud)
小智 13
我应该建议使用ruby logger,它比puts更好,你可以有多个日志级别,你可以打开/关闭:调试,警告,信息,错误等.
logger = Logger.new(STDOUT)
logger = Logger.new("/var/log/my-daemon.log")
Run Code Online (Sandbox Code Playgroud)
我使用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"
Run Code Online (Sandbox Code Playgroud)
Pis*_*tos 12
尝试
$stdout = File.new( '/tmp/output', 'w' )
Run Code Online (Sandbox Code Playgroud)
恢复:
$stdout = STDOUT
Run Code Online (Sandbox Code Playgroud)