Ruby on Rails production log rotation

Jaki jest najlepszy sposób na włączenie rotacji logów w aplikacji produkcyjnej Ruby on Rails?

Czy to przez użycie logrotate na serwerze hostingowym, czy istnieje zestaw opcji do wykorzystania przy inicjalizacji loggera z aplikacji?

Author: cnicolaou, 2011-02-03

5 answers

Opcja 1: syslog + logrotate

Możesz skonfigurować rails, aby używać narzędzi logów systemowych.

Przykład w config/environments / production.rb .

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

W ten sposób logujesz się do syslog i możesz użyć domyślnych narzędzi logrotate do obracania dzienników.

Opcja 2: normalne dzienniki szyn + logrotate

Inną opcją jest po prostu skonfigurowanie logrotate tak, aby odbierał logi pozostawione przez rails. Na Ubuntu i Debianie, który byłby np. w pliku o nazwie /etc/logrotate.d/rails_example_com.

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

Zgodnie z poniższymi sugestiami, w Rails zaleca się użycie copytruncate, aby uniknąć konieczności ponownego uruchamiania aplikacji Rails.

Edit: usunięto "sharedscripts/endscript", ponieważ nie są one tutaj używane i powodują problemy zgodnie z komentarzem. I usunięto create 640 root adm zgodnie z sugestią komentarza.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-04 15:05:44

Jeśli używasz logrotate, możesz wybrać jedną z opcji pokazanych poniżej, umieszczając plik conf w /etc / logrotate.d / katalog.

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

Lub

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

Należy pamiętać, że copytruncate tworzy kopię zapasową bieżącego dziennika, a następnie czyści plik dziennika w celu dalszego zapisu. Alternatywą jest użycie create, które wykona obrót poprzez zmianę nazwy bieżącego pliku, a następnie utworzenie nowego pliku dziennika o tej samej nazwie co stary plik. mocno Poleć używanie copytruncate, chyba że wiesz, że musisz utworzyć. Powodem tego jest to, że Rails może nadal wskazywać na stary plik dziennika, nawet jeśli jego nazwa się zmieniła i mogą wymagać ponownego uruchomienia w celu zlokalizowania nowego pliku dziennika. copytruncate unika tego, zachowując ten sam plik co aktywny plik.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-11 22:30:32

Dla Rails 5, to jest to, co musiałem zrobić, aby ograniczyć rozmiar dziennika i nie zmieniać wyjścia serwera w konsoli:

Zgodnie z dokumentacją , jeśli chcesz ograniczyć rozmiar folderu dziennika, umieść to w swoim pliku środowiskowym ('development.produkcja rb'/'.rb").

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

Dzięki temu Twoje pliki dziennika nigdy nie będą większe niż 50 MB. Możesz zmienić rozmiar według własnych preferencji. "1" w drugim parametrze oznacza, że zostanie zachowany 1 historyczny plik dziennika, więc posiadaj do 100MB logów-bieżący log i poprzedni fragment 50Mb.

Źródło tego rozwiązania .

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-28 13:38:23

Dla każdego logu: rails log, rpush log,... Możesz użyć tego w pliku konfiguracyjnym usługi:

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

To znaczy: Zapisz tylko 1 poprzedni plik dziennika po podziale. Główny rozmiar dziennika nigdy nie przekracza 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-18 05:08:23

Włącz wysyłanie logów do loggly za pomocą rails logglier w następujący sposób w moim środowisku / produkcji.plik rb. wersja rails to 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-30 11:15:12