3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ruby1.9.3&unicornでLogger使ってログローテするとログたくさんできたよ\(^o^)/

Last updated at Posted at 2014-09-16

ruby1.9.3 と sinatra、unicornの構成でWebシステム運用中です。
unicornのworker_process は5 に設定。

そんな設定下で、下記のようなコードがありました。

controller.rb
logger = Logger('hoge.log', daily)
logger.info "hogehoge"

期待する動きとしては、/log/hoge.log が出来て、
日付が変わるときに /log/hoge.log.YYYYMMDD になってローテートしてくれるハズ。

しかし、現実は非情であり。

日付が変わると、
/log/hoge.log.YYYYMMDD
ができると、その後に続くように
/log/hoge.log.YYYYMMDD.1
/log/hoge.log.YYYYMMDD.2
/log/hoge.log.YYYYMMDD.3
/log/hoge.log.YYYYMMDD.4
…というログファイルが生成されます。

どうやら、workerのプロセスごとに個別にローテートをしようとしてくれている。
…ですが。
これだとログファイルの数だけとっ散らかっていき可読性悪いことこの上ないです。

普通に logrotate.d を使うしかないのか、、と思っていましたが、
同様の問題に当たった方が、プロセスセーフを考慮したLoggerを作ってくれていました。

process_safe_logger というgem になります。

また、Ruby2.1.0からは、デフォルトでプロセスセーフになったとのこと。

おお、これは嬉しい!感謝感謝です。
とはいえ、現行システムはgem対応までしかできないですけどね…w

翌日譚

あれー相変わらずログは「hoge.log.YYYYMMDD.1」形式で出力されてるorz
改めて記事の内容を確認していったところ、プロセスセーフという言葉を完全に勘違いしていますね…
お恥ずかしい。。
ログファイルのロックや上書きが発生してしまうことが問題であり、
ログファイルが複数できるのは仕様上正しい動きのようです。

これは、ログを収集するプログラム(fluentdですが)の方で吸収するのがいいかもしれないな…。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?