Rotación del registro de producción de Ruby on Rails


¿Cuál es la mejor manera de habilitar la rotación de registros en una aplicación de producción Ruby on Rails?

¿Es mediante el uso de logrotate en el servidor de alojamiento o hay un conjunto de opciones para usar al inicializar logger desde la aplicación?

Author: cnicolaou, 2011-02-03

5 answers

Opción 1: syslog + logrotate

Puede configurar rails para usar las herramientas de registro del sistema.

Un ejemplo en config/environments/production.rb.

# Use a different logger for distributed setups
config.logger = SyslogLogger.new

De esta manera, se inicia sesión en syslog, y puede usar las herramientas de logrotate predeterminadas para rotar los registros.

Opción 2: registros de carriles normales + logrotate

Otra opción es simplemente configurar logrotate para recoger los registros dejados por rails. En Ubuntu y Debian que estaría, por ejemplo, en un archivo llamado /etc/logrotate.d/rails_example_com.

/path/to/rails.example.com/tmp/log/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    copytruncate
}

Como se sugiere a continuación, en Rails se recomienda usar copytruncate, para evitar tener que reiniciar la aplicación Rails.

Editar: eliminado "sharedscripts/endscript" ya que no se utilizan aquí y causan problemas de acuerdo con el comentario. Y eliminado create 640 root adm según el comentario sugerido.

 189
Author: berkes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-04 15:05:44

Si está utilizando logrotate, puede elegir cualquiera de las opciones que se muestran a continuación colocando un archivo conf en /etc/logrotate.d/ directorio.

# Rotate Rails application logs based on file size
# Rotate log if file greater than 20 MB
/path/to/your/rails/applicaton/log/*.log {
    size=20M
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    copytruncate
}

O

# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
  weekly
  missingok
  rotate 52
  compress
  delaycompress
  notifempty
  copytruncate
}

Tenga en cuenta que copytruncate hace 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 renombrando el archivo actual y luego creando un nuevo archivo de registro con el mismo nombre que el archivo anterior. Yo fuertemente recomiende que utilice copytruncate a menos que sepa que necesita crear. La razón es que Rails puede seguir apuntando al archivo de registro antiguo a pesar de que su nombre ha cambiado y pueden requerir un reinicio para localizar el nuevo archivo de registro. copytruncate evita esto manteniendo el mismo archivo que el archivo activo.

 51
Author: amit_saxena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-11 22:30:32

Para Rails 5, esto es lo que tenía 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, coloque esto en su archivo de entorno ('desarrollo.producción rb"/".rb').

config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)

Con esto, sus archivos de registro nunca crecerán más de 50 Mb. Puede cambiar el tamaño a su propia preferencia. El ' 1 ' en el segundo parámetro significa que se mantendrá 1 archivo de registro histórico, por lo que tener hasta 100Mb de registros – el registro actual y el trozo anterior de 50Mb.

Fuente de esta solución.

 22
Author: Fellow Stranger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-28 13:38:23

Para cada registro: Rails log, Rpush log,... Puedes usarlo así en tu archivo de configuración de servicio:

 config.log_file = 'log/rpush.log'
 config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)

Significa: solo guarde 1 archivo de registro anterior después de dividir. El tamaño del registro principal nunca supera los 20 MB.

 1
Author: ThienSuBS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-18 05:08:23

Habilitar para enviar registros al loggly usando rails logglier como sigue en mis entornos/producción.archivo rb. la versión de rails es 4.1.0

RailsApplication::Application.configure do
require 'logglier'
config.logger = Logglier.new(<https://logs-01.loggly.com/inputs/inputkey>)
log.info("hello from logglier")
end
 -8
Author: riya khana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-30 11:15:12