[groonga-dev,03393] Re: groonga-clientとgroongaのログメッセージについて

Back to archive index

Kouhei Sutou kou****@clear*****
2015年 8月 6日 (木) 21:51:49 JST


須藤です。

In <CA+Tq-RqAq2aeizzEjbK-PRxN-jT_+vCcC=5Bzkd****@mail*****>
  "[groonga-dev,03390] groonga-clientとgroongaのログメッセージについて" on Wed, 5 Aug 2015 21:33:53 +0900,
  Hiroyuki Sato <hiroy****@gmail*****> wrote:

> 1, groonga-clientについて
> 
>   groonga-clientで次のようにデータが入った時に件数がちゃんと入ったことを確認するのは
>   次のように返ってきた値のbodyの数をみれば良いのでしょうか?
>
>     # recordsは挿入するエントリのハッシュの配列
>     ret =****@clien*****({:table => @out_table,
>                         :values => records })
> 
>     # 挿入(と更新)件数と、予定件数が一緒か確認
>     ret.body == records.size

はい、そうです。

>   以前エラーがあったら例外が上がると聞いていたので、件数が0件だったというのは
>   検出したいと思っています。

すみません。。。

>   groonga-clientのバージョンは0.1.7です。
> 
>     >   (3) エラーハンドリング
>     >
>     >     返ってくるエラー処理の例などどこかにありますでしょうか?
> 
>     fluent-plugin-groongaが参考になると思います。
> 
>     基本的にGroonga::Client::Errorでrescueすればいいです。

Groongaのloadはいわゆるバルクロードなので1つでも問題があった
ら止まる、ではなく、できる限り処理をして、問題があったらログ
に書く、という方針の動きになっています。なので、load中に変な
データがあってもload的には「成功」なのです。

なので、全件loadできたかどうかはloadの結果に入っている件数と
自分が送ったデータの件数を確認してください。ただし、件数は同
じでもカラムの値がおかしいとか、カラム名をtypoしていて無視さ
れていたというものには気付けないことに注意してください。

現状、↑のようなケースを検出するにはログを見るしかないで
す。。。リモートから検出できるようにするにはどんなAPIにする
のがいいんでしょうねぇ。バルクロードじゃない1件ずつロードす
るAPIだとエラーを返すのは自然にできるんですけど、性能がでな
いんですよねぇ。

> 2, groongaのログについて
> 
>  次のようになメッセージがログに残るのですが、これはエラーではないと
>  考えてよいのでしょうか?
>
>   2015-08-05 21:12:20.668028|n| thread start (0/1)
>   2015-08-05 21:12:20.668492|e| ignored invalid char('=') at
>   2015-08-05 21:12:20.668514|e| [{"field"=
>   2015-08-05 21:12:20.668524|e|            ^
>   2015-08-05 21:12:20.668532|e| ignored invalid char('>') at
>   2015-08-05 21:12:20.668539|e| [{"field"=>
>   2015-08-05 21:12:20.668547|e|             ^
>   2015-08-05 21:12:20.668555|e| ignored invalid char('=') at
>   2015-08-05 21:12:20.668563|e| [{"field"=>"文字列", "field2"=
>   2015-08-05 21:12:20.668570|e|                                           ^

いえ、残念ながらエラーです。。。

ログの読み方は↓に書いてあるのですが、
  http://groonga.org/ja/docs/reference/log.html#process-log
  (あれ、翻訳していなかったんだっけ。。。)

タイムスタンプの後の

  |X|

の「X」の部分がログレベルを表しています。で、「e」はエラーと
いう意味なのです。

>  log-levelはinfoを指定、またはlog-level未指定です。
>  エラーメッセージでなければ、ちょっと冗長かなと思います。

エラーメッセージなので冗長ではないのです。

>  一般的にどのぐらいのログレベルが適切でしょうか?

一般的にはデフォルトのnoticeが適切です。

開発時はinfoにして、少し困ったときはdebugにするというのはア
リです。infoにするとクエリーで何件ヒットしたかとかがでるよう
になったりします。debugにするともしかしたらヒントになる情報
があるかもしれない、という感じです。


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
  http://www.clear-code.com/services/code-reader/




groonga-dev メーリングリストの案内
Back to archive index