Rotation du journal de production Ruby on Rails

Quel est le meilleur moyen d'activer la rotation du journal sur une application de production Ruby on Rails?

Est-il par l'utilisation de logrotate sur le serveur d'hébergement ou est-il un ensemble d'options à utiliser lors de l'initialisation enregistreur de données de l'application?

159
demandé sur cnicolaou 2011-02-03 11:36:44

5 réponses

Option 1: syslog + logrotate

Vous pouvez configurer rails, pour utiliser les outils de journal des systèmes.

Un exemple dans config / environnements / production.rb .

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

De cette façon, vous vous connectez à syslog et pouvez utiliser les outils logrotate par défaut pour faire pivoter les journaux.

Option 2: rails normaux logs + logrotate

Une autre option consiste à configurer simplement logrotate pour récupérer les journaux laissés par rails. Sur Ubuntu et Debian, ce serait, par exemple, dans un fichier appelé /etc/logrotate.d/rails_example_com.

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

, Comme par les suggestions ci-dessous, dans les Rails, il est conseillé d'utiliser copytruncate, pour éviter d'avoir à redémarrer l'application Rails.

Edit: supprimé "sharedscripts / endscript" car ils ne sont pas utilisés ici et causent des problèmes selon le commentaire. Et supprimé create 640 root adm selon le commentaire suggéré.

189
répondu berkes 2013-05-04 15:05:44

Si vous utilisez logrotate, vous pouvez choisir l'une des options ci-dessous en plaçant un fichier conf dans le fichier /etc/logrotate.d/ répertoire.

# 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
}

Ou

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

Veuillez noter que copytruncate effectue une copie de sauvegarde du journal en cours, puis efface le fichier journal pour la poursuite de l'écriture. L'alternative est d'utiliser create qui effectuera la rotation en renommant le fichier actuel, puis en créant un nouveau fichier journal avec le même nom que l'ancien fichier. je fortement recommandez d'utiliser copytruncate sauf si vous savez que vous avez besoin de create. La raison en est que Rails peut toujours continuer à pointer vers l'ancien fichier journal même si son nom a changé et qu'il peut nécessiter un redémarrage pour localiser le nouveau fichier journal. copytruncate évite cela en conservant le même fichier que le fichier actif.

51
répondu amit_saxena 2011-09-11 22:30:32

Pour Rails 5, c'est ce que j'ai dû faire pour limiter la taille du journal et ne pas changer la sortie du serveur dans la console:

Selon la documentation , Si vous voulez limiter la taille du dossier journal, mettez ceci dans votre environnement-file ('development.RB ' / ' production.rb').

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

Avec cela, vos fichiers journaux ne dépasseront jamais 50 Mo. Vous pouvez modifier la taille selon vos préférences. Le ‘1 ' dans le deuxième paramètre signifie que 1 fichier journal historique sera conservé, de sorte que vous avoir jusqu'à 100 mo de journaux – le journal actuel et le bloc précédent de 50 mo.

Source de cette solution.

22
répondu Fellow Stranger 2016-05-28 13:38:23

Pour chaque journal: Rails journal, Rpush journal ... Vous pouvez l'utiliser comme ceci dans votre fichier de configuration de service:

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

Cela signifie: seulement enregistrer 1 fichier journal précédent après la scission. Taille du journal principal jamais plus de 20 Mo.

1
répondu ThienSuBS 2017-04-18 05:08:23

Activer pour envoyer des journaux à la loggly en utilisant rails logglier comme suit dans mes environnements / production.fichier rb. la version de rails est 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
répondu riya khana 2014-04-30 11:15:12