Rediriger la sortie de la commande «putting» vers un fichier journal
Question
Je travaille sur la création d'un démon dans Ruby à l'aide du démon gem. Je veux ajouter la sortie du démon dans un fichier journal. Je me demande quel est le moyen le plus simple de rediriger met
de la console vers un fichier journal.
La solution
Je devrais recommander l'utilisation de ruby ??logger, c'est mieux que de mettre, vous pouvez avoir plusieurs niveaux de journalisation que vous pouvez activer / désactiver: déboguer, avertir, info, erreur, etc.
logger = Logger.new(STDOUT)
logger = Logger.new("/var/log/my-daemon.log")
J'utilise un paquet runit pour gérer les services Ruby, il contient svlogd qui redirige le résultat du démon vers le fichier journal. Voici le script d'exécution du processus de journalisation:
#!/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"
Autres conseils
Si vous devez capturer à la fois STDERR et STDOUT et que vous ne souhaitez pas vous connecter, voici une solution simple adaptée de cet article :
$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
Essayez
$stdout = File.new( '/tmp/output', 'w' )
Pour restaurer:
$stdout = STDOUT
Ou vous pouvez redéfinir la commande met
? Ne fonctionne probablement que dans un seul fichier / classe
def puts(message)
#write message to file
end