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