188 votes

Ruby on Rails production de rotation du journal

Quel est le meilleur moyen pour permettre la rotation des journaux sur Ruby on Rails production de l'app?

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?

213voto

berkes Points 9945

Option 1: syslog + logrotate

Vous pouvez configurer les rails, à utiliser les systèmes journal d'outils.

Un exemple de config/environments/production.rb.

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

De cette façon, vous vous connectez à un serveur syslog, et peut utiliser la valeur par défaut logrotate outils de rotation des logs.

Option 2: normal Rails de journaux + logrotate

Une autre option est de simplement configurer logrotate pour ramasser les journaux de gauche par les 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
}

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

Edit: supprimé "sharedscripts/endscript", car ils ne sont pas utilisés ici et causer des problèmes en fonction de commentaire. Et supprimé create 640 root adm comme par commentaire, il est proposé.

58voto

amit_saxena Points 2434

Si vous utilisez logrotate ensuite, vous pouvez choisir l'une des options indiquées ci-dessous en plaçant un fichier de conf dans /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 fait une copie de sauvegarde du journal actuel et puis efface le fichier journal pour continué à écrire. L'alternative est d'utiliser créer qui va effectuer la rotation en renommant le fichier en cours et ensuite, la création d'un nouveau fichier portant le même nom que l'ancien fichier. Je recommande fortement que vous utilisez copytruncate sauf si vous savez que vous avez besoin de créer. La raison en est que les Rails peuvent toujours garder de montrer à l'ancien fichier journal, même si son nom a changé et ils peuvent nécessiter un redémarrage pour localiser le nouveau fichier journal. copytruncate évite cela en gardant le même fichier que le fichier actif.

47voto

Tom Harrison Jr Points 5855

Mise à JOUR: après la mise en œuvre dans notre application, j'ai appris que comme des Rails 3.1 Logger classe est dépréciée en faveur de l' BufferedLogger classe, qui ne prend pas en charge l'API indiqué ci-dessous. La bonne réponse ne semble pas être l'UNIX logrotate.

La réponse suivante est spécifique à Rails 3, et n'est pas recommandé pour les Rails 3.1 et au-dessus.

Réponse originale à cette question, malheureusement ce n'est pas pertinente... En utilisant UNIX logrotate est généralement pas nécessaire, et a le désavantage d'avoir d'autres de la configuration du système à l'extérieur de l'environnement Rails, ce qui crée une dépendance, une autre chose à ne pas en contrôle de code source, le manque de visibilité et de flexibilité, etc. - vous savez, toutes ces choses que Rails est bon :-)

Rails 3 (et peut-être plus tôt) a adapté, intégré dans la rotation des journaux et de la suppression de l'option. La documentation est horrible, mais c'est en fait simple à utiliser.

Les paramètres sont généralement en config/environments/production.rb (et development.rb, test.rb, autres) sur la ligne de départ config.logger. Pour utiliser la valeur par défaut Rails enregistreur utiliser une ligne comme ceci

config.logger = Logger.new(config.paths.log.first, 10, 100.megabytes)

Cette new méthode prend deux point de prêter à différents ensembles d'arguments. Le premier argument est toujours le chemin d'accès au fichier journal.

Celui généré avec une nouvelle application Rails utilise deux arguments, le second étant une période de temps la chaîne 'daily' ou 'weekly'. Mais cela laisse tout les journaux qui traînent. Pour construire. Puis prendre vers le bas de votre site lorsque le serveur est à court d'espace disque. Pas que que cela n'arrivera jamais à moi...

Les trois-arg variante présentée ici est différent. Dans ce cas, le deuxième argument est un nombre: le nombre de journaux à retenir lors de la rotation, dans ce cas de 10 fichiers. Le troisième argument est le nombre d'octets à mettre dans les journaux avant la rotation, dans ce cas, 100.méga-octets, ce qui signifie que je vais avoir au plus 1 go de fichiers de log.

Et si vous voulez que vos journaux en /var/log avec tous les autres, vous pouvez simplement spécifier que le chemin d'accès dans le premier arg. Avoir votre gâteau, il mange trop.

-9voto

riya khana Points 1

Permettre d'envoyer des journaux à la loggly à l'aide de rails logglier comme suit dans mes environnements de production.rb fichier. rails version 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X