Quelle est la meilleure façon d'activer la rotation des journaux sur une application de production Ruby on Rails?
Est-ce en utilisant logrotate sur le serveur d'hébergement ou existe-t-il un ensemble d'options à utiliser lors de l'initialisation de l'enregistreur à partir de l'application?
ruby-on-rails
logging
production-environment
cnicolaou
la source
la source
Réponses:
Option 1: syslog + logrotate
Vous pouvez configurer des rails pour utiliser les outils de journalisation des systèmes.
Un exemple dans config / environnements / production.rb .
De cette façon, vous vous connectez à syslog et pouvez utiliser les outils logrotate par défaut pour faire pivoter les journaux.
Option 2: journaux Rails normaux + logrotate
Une autre option consiste simplement à configurer logrotate pour récupérer les journaux laissés par les rails. Sur Ubuntu et Debian, ce serait, par exemple, dans un fichier appelé
/etc/logrotate.d/rails_example_com
.Selon les suggestions ci-dessous, dans 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 posent des problèmes selon le commentaire. Et supprimé
create 640 root adm
selon le commentaire suggéré.la source
logrotate
solution, la réponse de @ amit-saxena vaut la peine - suggère l'utilisation decopytruncate
sur lacreate
directive.copytruncate
,create
n'a aucun effet, vous devriez donc probablement le supprimer de votre exemplesu your_rails_user your_rails_group
avec le propriétaire et le groupe de vos fichiers journaux (c'est-à-dire ceux du processus Rails / Passenger) ou (versions récentes de?) Logrotate peut se plaindre des autorisations.Si vous utilisez logrotate, vous pouvez choisir l'une des options ci-dessous en plaçant un fichier conf dans le répertoire /etc/logrotate.d/.
Ou
Veuillez noter que copytruncate effectue une copie de sauvegarde du journal actuel, puis efface le fichier journal pour continuer à écrire. 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 vous recommande fortement d'utiliser copytruncate à moins que vous ne sachiez que vous devez créer. La raison en est que Rails peut continuer à pointer vers l'ancien fichier journal même si son nom a changé et qu'il peut être nécessaire de redémarrer pour localiser le nouveau fichier journal. copytruncate évite cela en conservant le même fichier que le fichier actif.
la source
logrotate --force $CONFIG_FILE
en spécifiant l'emplacement du fichier de configuration pour l'exécuter manuellement.Pour Rails 5, voici ce que j'ai dû faire pour limiter la taille du journal et ne pas modifier la sortie du serveur dans la console:
Selon la documentation , si vous souhaitez limiter la taille du dossier de journal, placez-le dans votre fichier d'environnement ('development.rb' / 'production.rb').
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 qu'un fichier journal historique sera conservé, vous aurez donc jusqu'à 100 Mo de journaux - le journal actuel et le bloc précédent de 50 Mo.
Source de cette solution .
la source
config.paths['log'].first
jeRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
c'est la même chose50 * 1024 * 1024
, mais beaucoup plus facile à comprendre. Voir les extensions principales d'ActiveSupport pour plus de détails.Rails.application.config.paths['log'].first
renvoyer exactement ce fichierPour Rails 5 , si vous voulez une rotation quotidienne des journaux, vous n'avez besoin que de ceci:
Selon la documentation , vous pouvez utiliser
daily
,weekly
oumonthly
.la source
Pour chaque journal: journal Rails, journal Rpush, ... Vous pouvez utiliser comme ceci dans votre fichier de configuration de service:
Cela signifie: enregistrez seulement 1 fichier journal précédent après la scission. La taille du journal principal ne dépasse jamais 20 Mo.
la source
Activez pour envoyer des journaux à la loggly à l'aide de rails logglier comme suit dans mon fichier environnements / production.rb. la version des rails est 4.1.0
la source