2009-06-24 14 views
13

Mam demona, który działa stale, co dość szybko napełnia plik dziennika (development.log lub production.log). Jaki jest najlepszy sposób usunięcia pliku dziennika po określonym rozmiarze lub usunięcie części przed określonym dniem.jak usunąć plik dziennika szyn po określonym rozmiarze

+1

należy edytować questing, aby określić, jakie OS używasz dalej, a także dodać trochę więcej tagów, ponieważ jest bardziej specyficzna niż Ra OS konkretny. –

+0

Pytanie bardziej szczegółowo dotyczące rotacji dziennika: http://stackoverflow.com/questions/4883891/ruby-on-rails-production-log-rotation/4883967#4883967 –

Odpowiedz

12

Najlepszym sposobem jest ustawienie rotacji logów, ale jak to zrobić, zależy to od platformy, , więc powinieneś dodać komentarz dotyczący tego, czego używasz, zarówno do programowania, jak i produkcji.

Dla naszych aplikacji uruchomionych na Linux, mamy plik /etc/logrotate.d/appname dla każdej aplikacji, , który wygląda mniej więcej tak:

/path/to/rails_root_for_app/log/production.log { 
    daily 
    missingok 
    rotate 7 
    compress 
    delaycompress 
    notifempty 
    create 640 capistrano capistrano 
} 

To będzie przenieść zalogować się na nowy plik raz dziennie, zachowując skompresowany plik kopii zapasowej dla każdego z ostatnich 7 dni.

Jeśli chcesz po prostu opróżnić plik bez zachowania jakichkolwiek danych w nim natomiast demon jest działa, po prostu zrobić to z powłoki:

> /path/to/rails_root_for_app/log/development.log 

To będzie obcięcie pliku do długości 0 bajtów .

0

Albo można powierzyć rejestrowanie do syslog

13
config.logger = Logger.new(config.log_path, 50, 1.megabyte) 

ale pamiętaj, że wiele kundle mogą mieć problemy z tym.

+1

To jest najbardziej poprawna odpowiedź ze ściśle określonego punktu widzenia Rails . –

+0

Co oznacza skrót 50? – Vinozio

+0

50 oznacza 50 plików. Zobacz shift_age http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html#method-c-new – Kirk

1

A nawet lepiej, jeśli wszystkie środowiska są na komputerze Mac lub Linux i mają/usr/sbin/rotatelogs, po prostu użyj tego. Jest znacznie bardziej elastyczny i nie ma problemu z utratą danych, który ma logrotate (nawet jeśli używasz skrótu danych).

Dodaj wewnątrz config/environment.rb (lub po prostu config/Środowiska/production.rb jeśli tylko chcą obrót w prod):

log_pipe = IO.popen("/usr/sbin/rotatelogs #{Rails.root}/log/#{Rails.env}.%Y%m%d.log 86400", 'a') 
config.logger = Logger.new(log_pipe) 

(Z this blog post)

2

Wolę miesięczny plik dziennika w moim pliku production.rb

config.logger = Logger.new(config.log_path, 'monthly')