2009-06-24 5 views
13

로그 파일 (development.log 또는 production.log)을 매우 빠르게 채우는 데몬이 있습니다. 특정 크기 다음에 로그 파일을 삭제하거나 특정 날짜 이전에 해당 부분을 삭제하는 가장 좋은 방법은 무엇입니까?특정 크기 다음에 레일스 로그 파일을 삭제하는 방법

+1

Ra가 아닌 OS에 따라 더 많은 태그를 추가하여 실행중인 OS를 지정해야합니다. ils 특정. –

+0

보다 구체적으로 로그 교체를 요청하는 질문 : http://stackoverflow.com/questions/4883891/ruby-on-rails-production-log-rotation/4883967#4883967 –

답변

12

가장 좋은 방법은 로그 회전을 설정하는 것입니다. 그러나이를 수행하는 방법은 매우 플랫폼에 따라 다릅니다 ( ). 개발 및 프로덕션 모두에 대해 사용중인 것에 대한 설명을 추가해야합니다. 이것은로 로그를 이동합니다

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

: 리눅스에서 실행되는 우리의 애플 리케이션에 대한

, 우리는 파일 각 응용 프로그램에 대한 /etc/logrotate.d/appname이 같이 보입니다 이 새 파일은 하루에 한 번씩, 지난 7 일 동안 각각 에 대한 압축 된 백업 파일을 보관합니다. 데몬이 실행하는 동안 당신은 단지 거기에 어떤 데이터를 유지하지 않고 파일을 비우려면

, 단순히 쉘에서 다음을 수행

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

이 0 바이트 길이에 파일을 자릅니다 .

0

또는 당신은 로깅 syslog

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

을 위임하지만,이 문제를 가질 수 여러 놈아을 조심 수 있습니다.

+1

이것은 레일스의 엄격한 관점에서 가장 정확한 답변입니다 . –

+0

50은 무엇을 의미합니까? – Vinozio

+0

50은 50 개의 파일을 의미합니다. shift_age http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html#method-c-new – Kirk

1

또는 모든 환경이 Mac 또는 Linux에 있고,/usr/sbin/rotatelogs를 사용하는 경우 더 잘 사용하십시오. 훨씬 더 유연하며, logrotate가 가진 데이터 손실 문제가 없습니다 (copytruncate를 사용하더라도).

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

(this blog post에서)

2

내가 매달을 선호 : (만 자극의 회전을하려면하거나 설정/환경/production.rb)

이 내부 설정/application.rb 추가 내 production.rb 파일의 로그 파일

config.logger = Logger.new(config.log_path, 'monthly') 
관련 문제