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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top