답변:
시스템 로그 도구를 사용하도록 레일을 구성 할 수 있습니다.
config / environments / production.rb 의 예제입니다 .
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
이렇게하면 syslog에 로그하고 기본 logrotate 도구를 사용하여 로그를 회전 할 수 있습니다.
또 다른 옵션은 레일에 남은 로그를 가져 오도록 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
솔루션을 사용하는 경우 @ amit-saxena의 답변이 가치가 있습니다. 지시적 copytruncate
초과 사용을 제안합니다 create
.
copytruncate
, create
당신은 아마 당신의 예에서 제거해야하므로, 아무런 효과가 없습니다
su your_rails_user your_rails_group
로그 파일의 소유자 및 그룹 (예 : Rails / Passenger 프로세스의 소유자 및 그룹)에 줄을 추가해야 하거나 (최근 버전?) logrotate가 권한에 대해 불평 할 수 있습니다.
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는 활성 파일과 동일한 파일을 유지하여이를 방지합니다.
logrotate --force $CONFIG_FILE
구성 파일 위치를 지정하여 수동으로 실행할 수 있습니다.
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.paths['log'].first
내가 넣었 어Rails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
와 동일하다 50 * 1024 * 1024
, 그러나 이해하기 훨씬 쉽습니다. 자세한 내용은 ActiveSupport 코어 확장 을 참조하십시오.
Rails.application.config.paths['log'].first
반환 정확히이 파일
들어 레일 오 당신이 일일 로그 회전을하려는 경우, 당신은이 필요합니다 :
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
있는 해당하는 문서를 , 당신이 사용할 수있는 daily
, weekly
또는 monthly
.
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