Перенаправьте вывод команды “puts” в файл журнала

StackOverflow https://stackoverflow.com/questions/224512

  •  03-07-2019
  •  | 
  •  

Вопрос

Я работаю над созданием демона на 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top