Estoy trabajando en la creación de un daemon en Ruby usando la gema daemons. Quiero agregar salida del daemon en un archivo de registro. Me pregunto cuál es la forma más fácil de redirigir puts
de la consola a un archivo de registro.Redirige el resultado del comando "puts" a un archivo de registro
Respuesta
que debe recomendar a utilizar registrador de rubí, es mejor que la pone, puede tener múltiples niveles de registro que se puede activar/desactivar: depuración, advierten, información, errores, etc.
logger = Logger.new(STDOUT)
logger = Logger.new("/var/log/my-daemon.log")
utilizo paquete runit para gestionar los servicios de rubí, se ha svlogd de voluntad redirigir la salida al archivo de registro del demonio, escritura Aquí está una duración de proceso de registrador:
#!/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"
Esto realmente no responde la pregunta. ¿Qué sucede si no puede controlar quién está haciendo las _puts_ y desea capturar cosas que normalmente escribirían en STDOUT y en su lugar las escribiría en un archivo? – silvamerica
Trate
$stdout = File.new('/tmp/output', 'w')
Para restaurar:
$stdout = STDOUT
No funcionaría para mí sin '$ stdout.sync = true'. –
Si necesita capturar tanto STDERR y stdout y no quiere recurrir a la tala, la siguiente es una solución sencilla adaptada de this post:
$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)
Gracias, eso funcionó muy bien junto con [esto] (http://stackoverflow.com/questions/1993071/how-to-controller-start-kill-a-background-process-server-app-in-ruby) ! – TheDeadSerious
'.sync' es crítico. –
¿Qué sucede si desea que las copias continúen yendo a la terminal, así como también al archivo de registro? p.ej. comportamiento como 'ruby myscript.rb | tee my.log' – wim
O puede redefinir el comando puts
? Funciona probablemente sólo en un único archivo/clase
def puts(message)
#write message to file
end
- 1. redirige las impresiones al archivo de registro
- 2. cómo redirigir resultado del comando time Linux a algún archivo
- 3. php: capturando el resultado del comando
- 4. Cómo capturar el resultado del comando Shell en C#?
- 5. ¿Cómo obtengo el resultado de un comando externo en Perl?
- 6. ¿Cómo aplicar el comando de shell a cada línea de un resultado de comando?
- 7. puts vs logger in rails tareas de rake
- 8. sonido del sistema de registro (stereomix) a un archivo
- 9. ¿Cómo obtengo Ruby 'puts' para escribir datos en un archivo?
- 10. ¿Puedo ejecutar el comando para cada resultado del archivo globbing en zsh sin?
- 11. Cómo capturar el resultado en una variable en lugar de en un archivo de registro?
- 12. Comprueba el resultado de un comando en el script de shell
- 13. ¿Cómo redirecciono el resultado del depurador de Visual Studio?
- 14. Usando el resultado de un comando como argumento en bash?
- 15. ¿Cómo se obtiene el resultado de un comando del sistema en Go?
- 16. Problema con el comando `pause` al redirigir un registro de línea de comandos al archivo
- 17. vbs cómo obtener el resultado de un comando de línea de comando
- 18. ¿Hay alguna manera en un script de shell para averiguar dónde se redirige su resultado?
- 19. VIM: almacenar la salida del comando externo en un registro
- 20. cómo saber si el registro binario de mysql es habilitado a través del comando sql?
- 21. Registro de error del comando make en Linux
- 22. ¿Cuál es el comando para truncar un archivo de registro de SQL Server?
- 23. ¿Cómo se redirige una salida de comando de shell a una entrada de script de Python?
- 24. ¿Cómo puedo almacenar el resultado de un comando del sistema en una variable de Perl?
- 25. Cómo anexar a un archivo usando el comando COPY
- 26. ASP.NET MVC redirige del atributo
- 27. Resultado del comando SQL al diccionario C# .NET 2.0
- 28. Crecimiento del archivo de registro de MongoDB
- 29. ¿Redirige las solicitudes solo si no se encuentra el archivo?
- 30. ¿Es posible acceder a la terminal mientras se redirige cout a archivo externo?
Utilice esta 'REGISTRADOR || = Logger.new ("| camiseta # {} settings.root /log/migration_script_logger.log", "mensual")', esta hará ambos – vs4vijay