Перенаправить вывод команды «put» в файл журнала - PullRequest
17 голосов
/ 22 октября 2008

Я работаю над созданием демона в Ruby с использованием гема демонов. Я хочу добавить вывод от демона в файл журнала. Мне интересно, как проще всего перенаправить puts из консоли в файл журнала.

Ответы [ 4 ]

38 голосов
/ 19 марта 2010

Если вам нужно захватить как STDERR, так и STDOUT и не хотите прибегать к ведению журнала, ниже приводится простое решение, адаптированное из этого поста :

$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
13 голосов
/ 22 октября 2008

Я бы рекомендовал использовать ruby ​​logger, это лучше, чем put, у вас может быть несколько уровней журнала, которые вы можете включать / выключать: отладка, предупреждение, информация, ошибка и т. Д.

 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"
11 голосов
/ 22 октября 2008

Попробуйте

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

Для восстановления:

$stdout = STDOUT
0 голосов
/ 24 марта 2014

Или вы можете переопределить команду puts? Работает, вероятно, только в одном файле / классе

def puts(message)
   #write message to file
end
...