0

このガイドクラスに関するドキュメントを読みました。毎日ロギング情報を取得するロガーを作成し、1 週間後に、最も古いロギング情報を毎回自動的に削除したいと考えています。

logfile = File.open(RAILS_ROOT + '/log/'+ (Date.today << 1).to_s + '_custom.log', 'a')  #create log file
logfile.sync = true  #automatically flushes data to file
CUSTOM_LOGGER = CustomLogger.new(logfile, 'daily')  #constant accessible anywhere

さらに、カスタム ログを作成したいので、たとえば次のようなもの (形式):

class MyLogger < Logger
  def format_message(severity, timestamp, progname, msg)
    "#{timestamp} : #{msg}\n"
  end
end

したがって、基本的に、すべてをどのディレクトリの下に正しく配置するかについて、より良いアイデアが必要です。たとえば、 MyLogger を論理的に配置する必要がある場所... (どこか? ヘルパ​​ー? または app/config/ の下?

それはこれを実装する有効な方法ですか?

config/initializers にすべてを置き、my_logger.rb という名前のファイルを作成して作成しました。ログファイルの削除/管理にまだ行き詰まっています。

サーバーはログローテーションでその部分を処理しますか (Linux OS からのログローテーションに何かがあることは知っています)。または、Rails はそれを内部で処理できますか?

4

1 に答える 1

2
  1. MyLogger は論理的にどこに配置する必要がありますか?

    おそらく/libの下に置いてください。その後、カスタム ロガーを設定するイニシャライザからそれを要求できます。

  2. 最も古いログ情報を定期的に削除するにはどうすればよいですか?

    これを行う方法は無数にあり、選択は制約に基づいて行われます。あなたは自分の制約についてあまり話していないので、適切な答えを出すのは難しいでしょう. たとえば、新しいログ エントリを追加するたびに古いログをクリーンアップしたり、cron ジョブを実行したり、ログ ローテーションやその他のログ メンテナンスを行う非 Rails ソフトウェアをインストールしたり、Heroku を使用する場合は Papertrail を使用したりできます。https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processesを検索できます。

    Rails は、リクエストを受信するコンテキストの外でメンテナンスを実行するよりも、リクエストを処理し、そのリクエストのコンテキストで応答するように設計されていることを思い出してください。MyLogger へのすべての format_message リクエストの副作用としてメンテナンスを行い、最も古いログ エントリをチェックし、1 週間以上前のものを見つけた場合はそれらを削除できます。これをインプロセスで実行できない理由について制約を与えていないため、初期段階で移植可能なものをプロトタイピングしている場合、これにより迅速に作業を進めることができます。

于 2012-08-29T21:10:48.987 に答える