Ruby本番アプリのRailsでログローテーションを有効にする最良の方法は何ですか?
ホスティングサーバーでlogrotateを使用するのですか、それともアプリからロガーを初期化するときに使用する一連のオプションがありますか?
システムログツールを使用するようにRailsを構成できます。
config/environments/production.rbの例。
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
これにより、syslogにログを記録し、デフォルトのログローテーションツールを使用してログをローテーションできます。
別のオプションは、単にRailsが残したログを取得するように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では、Railsアプリを再起動する必要がないように、copytruncate
を使用することをお勧めします。
編集:「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)
これにより、ログファイルが50 MBを超えることはありません。サイズを自分の好みに変更できます。 2番目のパラメーターの「1」は、1つの履歴ログファイルが保持されることを意味するため、最大100 MBのログ(現在のログと以前の50 MBのチャンク)があります。
すべてのログ:Railsログ、Rpushログ、...サービスの設定ファイルで次のように使用できます。
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
つまり、分割後に1つ前のログファイルのみを保存します。メインログサイズは20 MBを超えない。
毎日のログローテーションが必要な場合、Rails 5で必要なのはこれだけです:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
ドキュメント に従って、daily
、weekly
、またはmonthly
を使用できます。