[ruby-on-rails] Ruby on Rails 프로덕션 로그 회전

Ruby on Rails 프로덕션 앱에서 로그 순환을 활성화하는 가장 좋은 방법은 무엇입니까?

호스팅 서버에서 logrotate를 사용합니까, 아니면 앱에서 로거를 초기화 할 때 사용할 옵션 세트가 있습니까?



답변

옵션 1 : syslog + logrotate

시스템 로그 도구를 사용하도록 레일을 구성 할 수 있습니다.

config / environments / production.rb 의 예제입니다 .

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

이렇게하면 syslog에 로그하고 기본 logrotate 도구를 사용하여 로그를 회전 할 수 있습니다.

옵션 2 : 일반 Rails 로그 + 로그 로테이션

또 다른 옵션은 레일에 남은 로그를 가져 오도록 logrotate를 구성하는 것입니다. 우분투와 데비안에서는 예를 들어라는 파일에 /etc/logrotate.d/rails_example_com있습니다.

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

아래의 제안에 copytruncate따라 Rails에서는 Rails 앱을 다시 시작하지 않아도되도록 사용하는 것이 좋습니다 .

편집 : “sharedscripts / endscript”는 여기에서 사용되지 않으므로 설명에 따라 문제가 발생하기 때문에 제거했습니다. 그리고 create 640 root adm의견에 따라 제거 되었습니다.


답변

logrotate를 사용하는 경우 /etc/logrotate.d/ 디렉토리에 conf 파일을 배치하여 아래 표시된 옵션 중 하나를 선택할 수 있습니다.

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

또는

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

copytruncate는 현재 로그의 백업 복사본을 만든 다음 계속 쓰기 위해 로그 파일을 지 웁니다. 다른 방법은 create를 사용하여 현재 파일의 이름을 바꾸고 이전 파일과 동일한 이름의 새 로그 파일을 만들어 회전을 수행하는 것입니다. 작성이 필요하다는 것을 모르면 copytruncate를 사용 하는 것이 좋습니다 . 그 이유는 이름이 변경 되어도 Rails가 여전히 이전 로그 파일을 계속 가리키고 새 로그 파일을 찾기 위해 다시 시작해야하기 때문입니다. copytruncate는 활성 파일과 동일한 파일을 유지하여이를 방지합니다.


답변

Rails 5의 경우 로그 크기를 제한하고 콘솔에서 서버 출력을 변경하지 않기 위해 수행해야하는 작업입니다.

문서에 따르면 로그 폴더의 크기를 제한하려면 환경 파일 ( ‘development.rb’/ ‘production.rb’)에 넣으십시오.

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

이를 통해 로그 파일은 50Mb보다 커지지 않습니다. 크기를 원하는대로 변경할 수 있습니다. 두 번째 매개 변수의 ‘1’은 1 개의 기록 로그 파일이 유지되므로 최대 100Mb의 로그 (현재 로그 및 이전 청크 50Mb)를 갖게됩니다.

이 솔루션의 소스 .


답변

들어 레일 오 당신이 일일 로그 회전을하려는 경우, 당신은이 필요합니다 :

  config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')

있는 해당하는 문서를 , 당신이 사용할 수있는 daily, weekly또는 monthly.


답변

모든 로그에 대해 : Rails 로그, Rpush 로그, … 서비스 설정 파일에서 다음과 같이 사용할 수 있습니다.

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

의미 : 분할 후 1 개의 이전 로그 파일 만 저장하십시오. 기본 로그 크기는 20MB를 넘지 않습니다.


답변

environment / production.rb 파일에서 다음과 같이 rails logglier를 사용하여 로그에 로그를 보낼 수 있습니다. 레일 버전은 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


답변