

Railsでログを出力する方法について知りました。  
<http://ruby-rails.hatenadiary.com/entry/20150110/1420863998>

この出力したログから、必要な情報のみを抽出してDBに保存するバッチ処理を作成したいと思っております。

そこで質問です。

1) そもそもそういったことがかのうでしょうか？

2) 可能な場合、どのようにログ・ファイルから必要な情報を抽出できるのでしょうか？

3) もしできない場合、一般的にこういうケースはどのように実装しているのでしょうか？

人手でやるのであれば、  
ログ・ファイルから必要な情報を抜き出し、コンソール上で保存をするという流れになりますが、  
それを自動化したいです。

また、近しい内容でいうと次のようなものになるかと思います。  
[アクセス数をもとに人気の記事を取得するには](https://ja.stackoverflow.com/questions/9585/%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%95%B0%E3%82%92%E3%82%82%E3%81%A8%E3%81%AB%E4%BA%BA%E6%B0%97%E3%81%AE%E8%A8%98%E4%BA%8B%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF)

fluentdやmongodbというのも検討したいのですが、今回はこれらを使わず、mysqlとrailsで運用して、  
運用が安定してからfluentdとかに移行していきたいと考えております。

よろしくお願いします。

# 追記

> 必要な情報のみを抽出するところ

こういうハッシュをログとして出力しているので、それを取得してPostモデルに保存するということをしたいです。  
{post_id: 1, name: “hoge”, category_id: 1}

リアルタイムにDBに保存するのではなく、  
バッチ処理として、まとめてDBに保存するといったことをやりたいです。


CC BY-SA 3.0
2016-05-30T12:42:21.307
25309
2016-10-19T15:26:43.207
2017-04-13T12:52:39.113
-1
13175
question
ruby-on-rails
出力したログから、必要な情報のみを抽出してDBに保存するバッチ処理を作成したいのですが、必要な情報を抽出し保存する部分の処理がわかりません。


もし私なら、タスクに書いて `cron` で回すと思います。  
参考サイトのとおりに、`development_special.log` に出力されているとして、こんな感じでしょうか。

[code]

    namespace :batch do
      task log_to_db: :environment do
        open(Rails.root.join("log/development_special.log")) do |file|
          Post.transaction do
            file.readlines.map do |line|
              Post.create(JSON.parse(line))
            end
          end
        end
      end
    end
    
[/code]

毎朝5時にバッチを回すなら、こんな感じ。

[code]

    0 5 * * * /bin/bash -l -c 'cd /your_rails_path && RAILS_ENV=hoge bundle exec rake batch:log_to_db'
    
[/code]

ところがこれをそのままやると、期待通りには動かないはずです。  
1日ごとのローテーションなら、開くログの名前が変わりますし、  
ログローテーションしないなら、前回までに登録したものを無視する必要があります。

それらも考慮に入れるには、情報が足りません。  
こうゆうことができるのだ、というイメージだけでも伝われば、と思います。

> 1) そもそもそういったことがかのうでしょうか？  
>  2) 可能な場合、どのようにログ・ファイルから必要な情報を抽出できるのでしょうか？

可能です。  
タスクや、`rails script`は、rails の世界にアクセスできるので、その中でファイルを開いて、DBに格納できます。

より詳しく知りたいのであれば、take88 さんの質問に回答してみてください。  
これは、非常に優れた質問です。

> バッチ処理はどういうタイミングで動くのでしょうか。あとOS環境は何ですか？

こちらに回答すると、より適切な回答が得られると思います。


CC BY-SA 3.0
2016-06-11T05:42:44.787
26648
2016-06-11T05:42:44.787
7471
25309
answer