質問
デバッグ モードで実行していないときに Flex アプリのトレース ステートメントをキャプチャする方法はありますか?
それとも、デバッガーを実行していないときにログ情報を出力する他の方法はありますか?
現在、非常に特殊な展開シナリオでのみ発生するバグを修正しようとしていますが、顧客がバグやその他の問題を報告するときにテクニカル サポートにログを送信する場合にこれが役立つことがわかりました。
解決
Flash Player をターゲットにした Adobe Flex について話しているのだと思いますか?
その場合は、送信されたログ メッセージを複数のターゲット (トレース スタックや内部メモリなど) に伝播する独自のロギング ラッパー クラスを作成して、アプリ内からログにアクセスできるようにすることができます。ユーザーがバグレポートの送信に同意した場合に、それをサーバーに送信します)。も参照してください。 フレックスロギングフレームワーク このようなものはすでに存在します。
私は実際にこのようなことをしました -- というクラスがあります Log
のような静的メソッドを使用すると、 log()
, debug()
, error()
等私のアプリで使用しており、このクラスは、送信されたすべてのメッセージをトレーススタックに転送します。 trace()
, 、LocalConnection および/または Socket (ソケット接続は明らかに LocalConnection よりもはるかに高速です) 経由で同じホスト上で実行されている「ログ コンソール」アプリに送信され、ユーザーがログと一緒にバグ レポートを送信できるように、それらをローカルの配列に保存します。アプリ内から直接出力できます。
この種のコース変更は、すべてを翻訳する必要があることを意味します。 trace()
コード内のコマンドをログ システムの呼び出しに組み込みますが、これは正規表現の検索と置換を使用して簡単に実現できます。
他のヒント
Google Code には、と呼ばれるプロジェクトがあります。 サンダーボルト これにより、以下に表示されるログ メッセージを書き込むことができます。 ファイアバグ Firefox でアプリケーションを実行するとき (もちろん、その拡張機能がインストールされていることが前提です)。
このツールを使用したロギングは次のように簡単です。
import org.osflash.thunderbolt.Logger;
var myNumber: int = 5;
var myString: String = "Lorem ipsum";
Logger.error ("Logging two objects: A number typed as int and a string", myNumber, myString);
以前はアルコンを使用していました。
Farata Systems の XPanel を試すことができます。これは、ブラウザーで実行されている Flex アプリケーションの場合でも、Flex 3 Logging API を使用してログ メッセージを表示できるネイティブ Windows UI です。残念ながら、サイトがリニューアルされてしまい、もう見つけることができません...もしかしたらGoogleがあなたを助けてくれるかもしれません。
JavaScript を使用して何か違うことをしました。顧客は、DHTML を使用してログとトレース ステートメントを表示する「特別な」ページを開くことができます。Flex アプリケーションは、このページが開かれているかどうかをアプリケーションに伝える JavaScript 関数を呼び出します。そうでない場合、ログは無効になります。これを開くと、ログ記録が有効になり、すべてのログ ステートメントがこのページに追加されます。
サンドボックスの制限により、ログ出力を常にファイルシステムに書き込む方法はないことに注意してください。ただし、上で説明したように、顧客はログ ウィンドウの出力を簡単にコピーして貼り付けることができます。