開発中ってログの容量食いますよね...。
みなさんは、どうしてますでしょうか?
適当なタイミングで削除はしてるのでしょうか?
実のところ私は、開発の際は、pryの方を使うことが多く、正直
ログに関してあまり理解していなかったんですよね...。
ただ、これを機に色々調査してみたので共有いたします!
rails:ログを削除するコマンド
$ rake log:clear
コンソールで、上記コマンドを実行すればログファイルが消えるかと思います。
ただ、毎回毎回手動で削除するのってかなり面倒ですよね?
そこで、何かいい方法がないか調べてみました。
ログローテーションとは?
ログローテーションとは、システムが残す時系列の記録データ(ログ)が際限なく増えることを防ぐために、一定の容量や期間ごとに古いログを削除したり新しいログで上書きすること。また、そのような機能。
IT用語辞典 e-Words
Railsにもログローテーションの便利な機能がデフォルトで備わっているらしい。
詳細はこちら、デフォルトのログファイルはどこに?にもあるのですが、開発環境の場合はログの設定用のファイルに追記することでログを定期退避&削除できるようです。
ログ設定用のファイル:config/environments/production.rb
# 5M をこえたらログが日付付きで退避され、合計が10ファイルをこえたら古いファイルは削除
config.logger = Logger.new('log/sample.log', 10, 5 * 1024 * 1024)
# 日付でログローテート
config.logger = Logger.new('log/sample.log', 'daily')
これだと、「sample.log.日付」というファイル名で、各日付ごとにログが退避されました。
今日が12/27日だとすると、明日には、
- sample.log.20211226
明後日には、
- sample.log.20211226
- sample.log.20211227
明明後日には、
- sample.log.20211226
- sample.log.20211227
- sample.log.20211228
・
・
・
ってファイルが退避されてるイメージですね。
1日でも容量が結構いくようなアプリを作ってる方だと、1日退避は結構便利ですよね。
「日付」「週間」「月ごと」などの期間で設定できる
# 日付でログローテート
config.logger = Logger.new('log/sample.log', 'daily')
# 週間単位でログローテート
config.logger = Logger.new('log/sample.log', 'weekly')
あと、「日付」「週間」「月ごと」などの期間で設定できるみたいなので、色々お試しあれ。
ちなみに、1つ落とし穴というか気をつけるべきポイントがあって、
自動で定期削除されるのは「日付」の方はどうやら無理らしい...。
下記の、容量で設定する場合のみしか、自動で削除までは行われないようです。うーん。自動で削除できないのなら、あまり使う意味はない気もしてくる...
# こちらは削除してくれる
config.logger = Logger.new('log/sample.log', 10, 5 * 1024 * 1024)
# daily(日付)の場合は、退避されるだけで削除はされないらしい
config.logger = Logger.new('log/sample.log', 'daily')
まあ、でも日付つけてリネームしてくれるだけでも十分便利ではあるか。