Je travaille sur la création d'un démon dans Ruby en utilisant la gemme daemons. Je veux ajouter la sortie du démon dans un fichier journal. Je me demande quel est le moyen le plus facile de rediriger puts
de la console vers un fichier journal.Rediriger la sortie de la commande "puts" vers un fichier journal
Répondre
Je recommande à utiliser un enregistreur de rubis, il est préférable que met, vous pouvez avoir plusieurs niveaux de journaux que vous pouvez activer/désactiver: debug, avertir, info, erreur, etc.
logger = Logger.new(STDOUT)
logger = Logger.new("/var/log/my-daemon.log")
J'utilise paquet runit pour gérer les services de rubis, il a svlogd que la volonté rediriger la sortie démon fichier journal, le script ici est exécuté pour le processus de l'enregistreur:
#!/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"
Cela ne répond pas vraiment à la question. Que faire si vous ne pouvez pas contrôler qui fait le _puts_ et que vous voulez capturer des choses qui normalement écriraient à STDOUT et les écrire dans un fichier? – silvamerica
Essayez
$stdout = File.new('/tmp/output', 'w')
Pour restaurer:
$stdout = STDOUT
Ça ne marcherait pas sans '$ stdout.sync = true'. –
Si vous devez capturer à la fois STDERR et STDOUT et ne veulent pas avoir recours à l'exploitation forestière, à la suite est une solution simple adaptée de this post:
$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
Merci, cela a fonctionné très bien en conjonction avec [ce] (http://stackoverflow.com/questions/1993071/how-to-controller-start-kill-a-background-process-server-app-in-ruby) ! – TheDeadSerious
'.sync' est critique. –
que se passe-t-il si vous voulez que les puts se poursuivent au terminal, ainsi que pour enregistrer le fichier? par exemple. comportement comme «ruby myscript.rb | tee my.log' – wim
Ou vous pouvez redéfinir la commande puts
? Fonctionne probablement dans un seul fichier/classe
def puts(message)
#write message to file
end
- 1. Rediriger la sortie audio vers la ligne
- 2. Rediriger la sortie Trace vers la console
- 3. Rediriger la sortie vers plusieurs fichiers et stdout simultanément dans la ligne de commande win XP
- 4. Rediriger la sortie standard vers syslog
- 5. windbg: Sortie de la commande vers le fichier texte
- 6. Comment rediriger la sortie de .exe vers un fichier en python?
- 7. Rediriger la sortie shell VxWorks vers un socket
- 8. Comment rediriger la sortie du compilateur gcc dans un fichier?
- 9. Rediriger la sortie audio
- 10. Puis-je rediriger la sortie d'un programme vers gvim?
- 11. Rediriger la sortie de test
- 12. Comment rediriger la sortie stdout et stderr d'un script Perl vers un fichier sous Windows?
- 13. Rediriger la sortie du fichier de commandes exe
- 14. C# Classe de processus rediriger la sortie vers le fichier vidéo
- 15. Puis-je rediriger la sortie de TPAGE
- 16. Comment enregistrer la sortie du journal NAnt dans un fichier?
- 17. XP invite de commande: rediriger un fichier à STDOUT
- 18. Comment rediriger la sortie vers stderr dans groovy?
- 19. Trouvez la stdout actuelle ou comment rediriger la sortie vers la console
- 20. Impossible de rediriger la sortie vers/var/lib/varlibfile, mais je peux copier un fichier varlib vers/var/lib
- 21. Redirection de la sortie vers un argument de ligne de commande d'une autre commande dans Windows
- 22. Une application Adobe AIR peut-elle être exécutée via la sortie de la ligne de commande vers la console?
- 23. La séquence de contrôle Xterm vers la sortie «T» vers un fichier
- 24. nunit ne sera pas rediriger la sortie de la console
- 25. Rediriger ConfigurationManager vers un autre fichier
- 26. Comment savoir si stderr dirige la sortie vers un fichier?
- 27. java web: comment rediriger stacktrace d'une exception non interceptée vers un fichier journal?
- 28. Rediriger Stdin et Stdout vers le fichier
- 29. Comment rediriger la sortie du script Groovy?
- 30. Rediriger le lot stderr vers le fichier
Utilisez cette 'ENREGISTREUR || = Logger.new ("| tee # {} settings.root /log/migration_script_logger.log", "mensuel")', ce fera les deux – vs4vijay