Reindirizzare l'output del comando "put" su un file di registro
Domanda
Sto lavorando alla creazione di un demone in Ruby usando la gemma demoni. Voglio aggiungere l'output del demone in un file di registro. Mi chiedo quale sia il modo più semplice per reindirizzare put
dalla console a un file di registro.
Soluzione
Dovrei raccomandare di usare il ruby ??logger, è meglio che mettere, puoi avere più livelli di log che puoi attivare / disattivare: debug, avvisare, informazioni, errori, ecc.
logger = Logger.new(STDOUT)
logger = Logger.new("/var/log/my-daemon.log")
Uso il pacchetto runit per gestire i servizi ruby, ha svlogd che reindirizzerà l'output del demone sul file di registro, qui è eseguito lo script per il processo del 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"
Altri suggerimenti
Se è necessario acquisire sia STDERR che STDOUT e non si desidera ricorrere alla registrazione, la seguente è una soluzione semplice adattata da questo post :
$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
Prova
$stdout = File.new( '/tmp/output', 'w' )
Per ripristinare:
$stdout = STDOUT
O puoi ridefinire il comando put
? Funziona probabilmente solo in un singolo file / classe
def puts(message)
#write message to file
end