Railsを使っていて結構謎な現象が起きた。
fluentdでRailsのログをS3に設置しようとしていたのだけれど、本番環境のログがうまくfluentdで処理されなかった?
現象の詳細
act-fluent-logger-railsの内部の join で incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
が発生する。
発生条件
- acts-as-taggable-on ( v3.4.3 ), act-fluent-logger-rails ( v0.1.5 )を使っていること。
config/fluent-logger.yml
のmessages_type
がstring
であるconfig.log_level
がdebug
である
上記を満たしている時に、acts-as-taggable-on
で日本語の含まれているタグを扱うと発生する<
原因
acts-as-taggable-onのnamedメソッド内部で、ascii-8bitとして扱うような記述があるため、クエリログがascii-8bitとなってしまっていた。この場合に日本語などのマルチバイト文字を含んでいると、join
などの文字列処理で例外が発生してしまう。
対策
act-fluent-logger-railsへ渡すログの文字列を強制的にUTF8にする