2008-10-22 159 views
16

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

+0

使用此`记录器|| = Logger.new( “| T恤#{} settings.root /log/migration_script_logger.log”, “月”)`,这将做两个 – vs4vijay 2016-03-31 12:12:32

回答

13

我应该推荐使用Ruby记录仪,它比放好,你可以有,你可以打开/关闭多个日志级别:调试,警告信息,错误等

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

我用runit包管理红宝石服务,它已经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" 
+14

这并没有真正回答这个问题。如果你无法控制谁正在执行_puts_,并且想要捕获通常写入STDOUT的东西,而是将它们写入文件? – silvamerica 2011-04-25 19:17:12

11

尝试

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

恢复:

$stdout = STDOUT 
+2

没有`$ stdout.sync = true`,它不会工作。 – 2012-02-10 16:02:51

34

如果您需要同时捕获STDERR和STDOUT,不希望诉诸记录,以下是改编自this post一个简单的解决方案:

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

谢谢,这工作很好,与[这个]结合(http://stackoverflow.com/questions/1993071/how-to-controller-start-kill-a-background-process-server-app-in-ruby) ! – TheDeadSerious 2011-02-05 17:01:44

0

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

def puts(message) 
    #write message to file 
end 
相关问题