fluent/fluent-plugin-mongo — pull request #5 by hotchpotch (2011-12-13 10:49:32+00:00)
Title: Rescue non utf8 string / invalid key / TypeError

運用で fluentd が mongo に書き込めなくてエラーのループになってしまう箇所を対応した実装です。実装としては、もし例外が発生したら問題のありそうな key から、問題となっている key を処理してます。

- utf8 でない文字列の utf8 化 ( NKF つかってますがダサイかも… )
- $ . 文字の置換
- String で無い文字列の String 化 ( bson_ext のみ発生 )

うーん、本来は fluent-plugin-mongo でやるべきではなくて、mongo の Ruby ライブラリ本体の例外発生時を、例外を発生させて処理を途中で止めるのではなくて、例外時はログに記録するけど無視できるオプションを入れるべきな感じもする(bson のコードを読むと、範囲外のInteger だったりと、他にも例外が発生する可能性があるので…)のですが、utf8 でなかったり . が key に入ってたり、というのは構造化ロガーの key によく使われそうなのでプラグイン側でも対応しました。