Jaki jest najlepszy sposób na włączenie rotacji logów w aplikacji produkcyjnej Ruby on Rails?
Czy odbywa się to za pomocą logrotate na serwerze hostingowym, czy też istnieje zestaw opcji do użycia podczas inicjowania rejestratora z aplikacji?
ruby-on-rails
logging
production-environment
cnicolaou
źródło
źródło
Odpowiedzi:
Opcja 1: syslog + logrotate
Możesz skonfigurować szyny, aby używać narzędzi dziennika systemowego.
Przykład w config / environment / production.rb .
W ten sposób logujesz się do syslog i możesz używać domyślnych narzędzi logrotate do obracania dzienników.
Opcja 2: normalne logi Railsów + logrotate
Inną opcją jest po prostu skonfigurowanie logrotate do zbierania kłód pozostawionych przez szyny. W systemach Ubuntu i Debian będzie to na przykład plik o nazwie
/etc/logrotate.d/rails_example_com
.Zgodnie z poniższymi sugestiami, w Railsach zaleca się użycie
copytruncate
, aby uniknąć konieczności ponownego uruchamiania aplikacji Rails.Edycja: usunięto "sharedscripts / endcript", ponieważ nie są one tutaj używane i powodują problemy zgodnie z komentarzem. I usunięte
create 640 root adm
zgodnie z sugestią komentarza.źródło
logrotate
rozwiązania, warto odpowiedzieć @ amit-saxena - sugeruje użyciecopytruncate
ponadcreate
dyrektywy.copytruncate
,create
nie ma efektu, więc prawdopodobnie powinieneś usunąć go ze swojego przykładusu your_rails_user your_rails_group
z właścicielem i grupą twoich plików dziennika (tj. Tych z procesu Rails / Passenger) lub (ostatnie wersje?) Logrotate może narzekać na uprawnienia.Jeśli używasz logrotate, możesz wybrać jedną z poniższych opcji, umieszczając plik conf w katalogu /etc/logrotate.d/.
Lub
Należy pamiętać, że copytruncate tworzy kopię zapasową bieżącego dziennika, a następnie czyści plik dziennika w celu kontynuowania zapisu. Alternatywą jest użycie funkcji create, która wykona obrót przez zmianę nazwy bieżącego pliku, a następnie utworzenie nowego pliku dziennika o tej samej nazwie co stary plik. Zdecydowanie zalecam używanie copytruncate, chyba że wiesz, że potrzebujesz utworzyć. Powodem jest to, że Railsy mogą nadal wskazywać na stary plik dziennika, mimo że jego nazwa uległa zmianie i mogą wymagać ponownego uruchomienia w celu zlokalizowania nowego pliku dziennika. copytruncate pozwala uniknąć tego, zachowując ten sam plik, co plik aktywny.
źródło
logrotate --force $CONFIG_FILE
, określając lokalizację pliku konfiguracyjnego, aby uruchomić go ręcznie.W przypadku Rails 5 musiałem to 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 pliku środowiska („development.rb” / „production.rb”).
Dzięki temu Twoje pliki dziennika nigdy nie będą większe niż 50 MB. Możesz zmienić rozmiar według własnych preferencji. Wartość „1” w drugim parametrze oznacza, że zostanie zachowany 1 plik dziennika, więc będziesz mieć do 100 MB dzienników - bieżący dziennik i poprzedni fragment o wielkości 50 MB.
Źródło tego rozwiązania .
źródło
config.paths['log'].first
bym umieścićRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
jest takie samo50 * 1024 * 1024
, ale znacznie łatwiejsze do zrozumienia. Aby uzyskać więcej informacji, zobacz podstawowe rozszerzenia ActiveSupport .Rails.application.config.paths['log'].first
zwróci dokładnie ten plikW przypadku Rails 5 , jeśli chcesz mieć codzienną rotację dzienników, potrzebujesz tylko tego:
Zgodnie z dokumentacją , można użyć
daily
,weekly
lubmonthly
.źródło
Dla każdego logu: Rails log, Rpush log, ... Możesz użyć tego w swoim pliku konfiguracyjnym usługi:
Oznacza to: po podziale zapisz tylko 1 poprzedni plik dziennika. Rozmiar głównego dziennika nigdy nie przekracza 20 MB.
źródło
Włącz wysyłanie dzienników do loggly przy użyciu logglier rails, jak pokazano w moim pliku environment / production.rb. wersja railsów to 4.1.0
źródło