Windows AzureでのTraceログを使う場合の注意点。
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
AzureのTraceログに関する基本的な内容は以下のリンクを参照。
業務システムでWindows Azureを使うための42の覚え書き「◇11:採取可能なログと格納先」
システムの動作ログの出力は基本的にこのTraceログを使うのが通常だと思いますが、
Traceログに日本語(ていうかマルチバイト文字?)が含まれていると正常に書き込めないケースがあります。
色々調べましたがはっきりとした条件はわかりませんでした。
「特定の文字」が含まれていると必ず失敗するというわけでもなく、
日本語がある程度の文字数(不定)含まれていると発生します。
Azure Storageに関するよく知られた話として、
「本番環境のAzure Storageには日本語を書き込めるがローカル環境のAzure Storageには書きこめない」
という問題があります。
StorageClient等を使って自分で書いたコードからAzureStorageに書き込む場合はそのとおりで、ローカル環境ではエラーになりますが本番環境では問題ありません。
しかしTraceログの日本語の問題はそれとは別で、ローカル環境だけでなく本番環境でも発生します。
Traceログの「一時的にWebサーバー内で保持して、後からAzure Storageに書きこむまでの間」に何か不具合があるのでしょう。
Microsoft(US)への問い合わせの回答は「バグとして認識している。そのうち対応するからそれまで待て」(意訳)
現時点での対応としては
1.Traceログを全て英語にする。
2.Traceログを書きこむListenerを自作して自分で用意したTableStorageに書き込む。
といったところでしょうか。
今回は簡単な内容で自作して対処しました。
Listenerが受け取ったタイミングでキューに保持しておいて、後から別スレッドから自分で用意したTableに非同期に書きこむだけの簡単な処理です。
ログの量やリクエスト数が膨大でなければこの程度で十分かな、と。
最初からこの件を知っていたら全部英語にしたと思いますけどね。
PR