¿Cuál es la mejor manera de habilitar la rotación de registros en una aplicación de producción de Ruby on Rails?
¿Es mediante el uso de logrotate en el servidor de alojamiento o hay un conjunto de opciones para usar al inicializar el registrador desde la aplicación?
ruby-on-rails
logging
production-environment
cnicolaou
fuente
fuente
Respuestas:
Opción 1: syslog + logrotate
Puede configurar rieles para usar las herramientas de registro de sistemas.
Un ejemplo en config / assets / production.rb .
De esa manera, inicia sesión en syslog y puede usar las herramientas predeterminadas de rotación de registros para rotar los registros.
Opción 2: registros de Rails normales + logrotate
Otra opción es simplemente configurar logrotate para recoger los registros que dejan los rieles. En Ubuntu y Debian eso sería, por ejemplo, en un archivo llamado
/etc/logrotate.d/rails_example_com
.Según las sugerencias a continuación, en Rails se recomienda usar
copytruncate
, para evitar tener que reiniciar la aplicación Rails.Editar: eliminó "sharedscripts / endscript" ya que no se usan aquí y causan problemas según el comentario. Y eliminado
create 640 root adm
según el comentario sugerido.fuente
logrotate
solución, vale la respuesta de @ amit-saxena: sugiere el uso decopytruncate
más decreate
directiva.copytruncate
,create
no tiene ningún efecto, por lo que probablemente debería eliminarlo de su ejemplosu your_rails_user your_rails_group
con el propietario y el grupo de sus archivos de registro (es decir, los del proceso Rails / Passenger) o (versiones recientes de?) Logrotate puede quejarse de los permisos.Si está utilizando logrotate, puede elegir cualquiera de las opciones que se muestran a continuación colocando un archivo conf en el directorio /etc/logrotate.d/.
O
Tenga en cuenta que copytruncate realiza una copia de seguridad del registro actual y luego borra el archivo de registro para continuar escribiendo. La alternativa es usar create, que realizará la rotación al renombrar el archivo actual y luego crear un nuevo archivo de registro con el mismo nombre que el archivo anterior.Le recomiendo que use copytruncate a menos que sepa que necesita crear. La razón es que Rails puede seguir apuntando al archivo de registro anterior a pesar de que su nombre ha cambiado y pueden requerir reiniciar para ubicar el nuevo archivo de registro. copytruncate evita esto manteniendo el mismo archivo que el archivo activo.
fuente
logrotate --force $CONFIG_FILE
especificando la ubicación del archivo de configuración para ejecutarlo manualmente.Para Rails 5, esto es lo que tuve que hacer para limitar el tamaño del registro y no cambiar la salida del servidor en la consola:
De acuerdo con la documentación , si desea limitar el tamaño de la carpeta de registro, colóquelo en su archivo de entorno ('development.rb' / 'production.rb').
Con esto, sus archivos de registro nunca crecerán más de 50Mb. Puede cambiar el tamaño según sus preferencias. El '1' en el segundo parámetro significa que se guardará 1 archivo de registro histórico, por lo que tendrá hasta 100Mb de registros: el registro actual y el fragmento anterior de 50Mb.
Fuente de esta solución .
fuente
config.paths['log'].first
ponerRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
es lo mismo50 * 1024 * 1024
, pero mucho más fácil de entender. Consulte las extensiones principales de ActiveSupport para obtener más detalles.Rails.application.config.paths['log'].first
devolver exactamente este archivoPara Rails 5 , si desea la rotación diaria de registros, solo necesita esto:
De acuerdo con la documentación , puede usar
daily
,weekly
omonthly
.fuente
Para cada registro: registro de Rails, registro de Rpush, ... Puede usarlo así en su archivo de configuración de servicio:
Significa: solo guardar 1 archivo de registro anterior después de dividir. El tamaño del registro principal nunca supera los 20 MB.
fuente
Habilite para enviar registros al loggly utilizando rails logglier como se muestra en mi archivo de entornos / production.rb. la versión de rails es 4.1.0
fuente