2008-10-22 128 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 
相關問題