Programming

Ruby on Rails 프로덕션 로그 회전

procodes 2020. 5. 29. 23:23
반응형

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)를 갖게됩니다.

이 솔루션의 소스 .


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

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

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


매일 로그 순환을 원한다면 Rails 5에서는 다음과 같은 것만 필요합니다.

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

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


Enable to send logs to the loggly using rails logglier as following in my environments/production.rb file. rails version is 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

참고URL : https://stackoverflow.com/questions/4883891/ruby-on-rails-production-log-rotation

반응형