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?
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é.
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.
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.
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.
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