Я работаю над созданием демона в Ruby, используя камень демонов. Я хочу добавить вывод из демона в файл журнала. Мне интересно, какой самый простой способ перенаправить puts
с консоли на файл журнала.
Перенаправить вывод команды "puts" в файл журнала
Ответ 1
Я бы рекомендовал использовать ruby logger, лучше, чем puts, вы можете иметь несколько уровней журналов, которые вы можете включить/выключить: debug, warn, info, error и т.д.
logger = Logger.new(STDOUT)
logger = Logger.new("/var/log/my-daemon.log")
Я использую пакет runit для управления службами ruby, у него есть svlogd, чем перенаправление вывода демона в файл журнала, здесь выполняется script для процесса регистрации:
#!/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"
Ответ 2
Если вам нужно захватить как STDERR, так и STDOUT и не хотите прибегать к регистрации, следуйте простым решением, адаптированным из этого сообщения:
$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
Ответ 3
Try
$stdout = File.new( '/tmp/output', 'w' )
Для восстановления:
$stdout = STDOUT
Ответ 4
Или вы можете переопределить команду puts
? Работает, вероятно, только в одном файле/классе
def puts(message)
#write message to file
end