回答:
システムログツールを使用するようにレールを構成できます。
config / environments / production.rbの例。
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
このようにして、syslogにログを記録し、デフォルトのlogrotateツールを使用してログをローテーションできます。
もう1つのオプションは、単にlogrotateを設定して、レールが残したログを取得することです。UbuntuとDebianでは、たとえばというファイルにあります/etc/logrotate.d/rails_example_com
。
/path/to/rails.example.com/tmp/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
以下の提案に従って、Railsではcopytruncate
Railsアプリを再起動する必要がないように、を使用することをお勧めします。
編集:「sharedscripts / endscript」はここでは使用されていないため削除され、コメントによると問題が発生しています。そしてcreate 640 root adm
提案されたコメントに従って削除されました。
logrotate
ソリューションを使用する場合、@ amit-saxenaの回答に値します- ディレクティブcopytruncate
よりも使用することをお勧めしますcreate
。
copytruncate
、create
あなたはおそらくあなたの例から削除する必要がありますので、効果がありません
su your_rails_user your_rails_group
、ログファイルの所有者とグループ(Rails / Passengerプロセスのもの)または(最近のバージョン?)の行を追加する必要がある場合があります。
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を超えることはありません。サイズはお好みで変更できます。2番目のパラメーターの「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
正確にこのファイルを返すことに注意してください
以下のためにRailsの5あなたは、毎日ログローテーションをしたい場合、あなたはこれだけを必要とします:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
ドキュメントによるとdaily
、weekly
またはを使用できますmonthly
。
私のenvironments / production.rbファイルで次のように、rails logglierを使用してログをlogglyに送信できるようにします。Railsのバージョンは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