web-dev-qa-db-ja.com

Ruby on Rails運用ログローテーション

Ruby本番アプリのRailsでログローテーションを有効にする最良の方法は何ですか?

ホスティングサーバーでlogrotateを使用するのですか、それともアプリからロガーを初期化するときに使用する一連のオプションがありますか?

165
cnicolaou

オプション1:syslog + logrotate

システムログツールを使用するようにRailsを構成できます。

config/environments/production.rbの例。

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

これにより、syslogにログを記録し、デフォルトのログローテーションツールを使用してログをローテーションできます。

オプション2:通常のRailsログ+ logrotate

別のオプションは、単に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を削除しました。

200
berkes

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は、アクティブファイルと同じファイルを保持することでこれを回避します。

55
amit_saxena

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のチャンク)があります。

このソリューションのソース

28
Fellow Stranger

すべてのログ:Railsログ、Rpushログ、...サービスの設定ファイルで次のように使用できます。

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

つまり、分割後に1つ前のログファイルのみを保存します。メインログサイズは20 MBを超えない。

1
ThienSuBS

毎日のログローテーションが必要な場合、Rails 5で必要なのはこれだけです:

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

ドキュメント に従って、dailyweekly、またはmonthlyを使用できます。

1