私はValaプログラミングには新しく、Javaと.NETでの経験はまだありますが、Valaとのログ記録に役立つものは何も見つかりませんでした。 log4jやlog4netのような便利なロギング機能はありますか?また、エラー、警告、デバッグ、トレースなどのいくつかのログレベルにスケーリングしてValaにログインする方法は何ですか? アサーションや契約のような防御プログラミングはどうですか?防御プログラミングを行い、スタックトレースと正確な根本的な原因で最も有用なログを取得するために推奨される方法はありますか? アドバイスをいただきありがとうございます。Valaでロギング
答えて
ログ
はValaのは、内蔵のいくつかのかなり強力なロギング機能を持っている。あなたは少し複雑なlog()
機能のショートカットとしてdebug()
、message()
、warning()
、error()
、およびcritical()
を使用することができます。すべてがベースに含まれています(自動的に含まれます)GLib
namespace。
ログ出力をリダイレクトするか、さまざまな種類のメッセージを別の宛先に送信する場合は、必要なものはすべてGLib.Log
namespaceにあります。舞台裏で起こっていることについては、glib docs on loggingをお読みください。
守備プログラミング
Valaのも、アサーションとの契約のためのサポートが含まれています。短いバージョン:アサーションの場合はassert()
とassert_not_reached()
、契約のメソッドシグネチャの場合はrequires()
とensures()
です。詳細はAssertions and Contract Programmingのチュートリアルのセクションを参照してください。
エラー処理
のValaのエラーハンドリングは少し奇妙です:-似て探して例外に、しかし全く同じではありません。 Error Handlingのチュートリアルのセクションでは、基礎を詳しく説明しています。また、glib docs on errorsを読むと、舞台裏で起こっていることをより詳細に理解することができます。私が知る限り、Valaのエラーからスタックトレースを取得する方法はありません。タイプとメッセージだけです。
ベストプラクティスの観点からベストプラクティス
、私はValaのは、あなたが既に知っている慣行が一般的な意味でも適用できることはJavaやC#に十分似ていると思います。私は、これらの機能を使って、Valaで具体的にどのように見えるかを知ることをお勧めします。がんばろう!
@chazomaticusに加えて素晴らしい答えがあります。コールスタックを巻き戻して、Valaからstacktraceを取得してください。
これはVala言語に焼き付けられていないことだけです。
は私が書かれているように、このようなライブラリーが起こる:ivy
:私は見ることはできないんだけど、なぜ
任意のデバッグ/ログ出力?
環境変数
G_MESSAGES_DEBUG
をall
に設定する必要があります。これはドキュメンテーションでも言及されていますが、これ以上は説明しません。例えば。 debugのために:public static int main (string[] args) { // Use "G_MESSAGES_DEBUG=all ./test" to print debug messages! // Output: ``** (process:<PID>): DEBUG: <FILENAME>:<LINE>: my 10. debug message`` debug ("my %d. %s", 10, "debug message"); return 0; } valac --pkg glib-2.0 GLib.debug.vala G_MESSAGES_DEBUG=all ./GLib.debug ./GLib.debug
あなたは出力をfurther restrictしたい場合は、
error
、warning
、critical
、message
、info
、debug
とhelp
の代わりall
を使用することができます。すべてのログ機能のドキュメントはどこにありますか?
さらに読書:
- 1. Valaの
- 2. waaでvalaライブラリを使ってvalaアプリケーションをコンパイルする
- 3. Valaのユニットテストフレーム
- 4. Vala for pidginプラグイン
- 5. vala Webkit.WebView DOM操作
- 6. Vala - 構文解析
- 7. フレックスユニットでロギング
- 8. C++のVala GUIとロジック
- 9. Valaの汎用関数
- 10. Windowsで実行するGNOME/Valaアプリケーション
- 11. valaはクロスプラットフォーム言語ですか?
- 12. Valaで複数のファイルを読む
- 13. Apache Axisでのロギング
- 14. モジュールからロギングされないロギング
- 15. Eazfuscator.NETロギング?
- 16. ロギングは
- 17. ロギングweb.ctx
- 18. Javaロギング
- 19. Pythonでのクラス間のロギング
- 20. $(brickval_VALASOURCES:.vala = .h)は何をしますか?
- 21. 理解のValaのコンパイル警告以下
- 22. Valaはgzipデータを解凍します
- 23. Azure Java Tomcatロギング
- 24. ロギング:スタンドアロンアプリケーションのSyslog?
- 25. DDD。ドメインモデルとロギング
- 26. スプリングブート@Aspect Jロギング
- 27. Javaロギングのフォーマット
- 28. ロギング戦略
- 29. シェアポイントのロギング/トレース
- 30. ローカルsyslogロギング
Valaのは契約違反のためにカスタムメッセージをサポートしていますか?それとも、謎めいたデフォルトのエラーメッセージを出すでしょうか?私はエラーをスローする良い方法を見つけようとしており、Valaチュートリアルのデフォルトの "エラー処理"/"契約プログラミング"セクションは本当に有用なものを何も記述していないようです。 – weberc2
契約書はカスタムエラーメッセージをサポートしていないg_return_if_fail()の呼び出しにコンパイルされているようです。そして、生成されたCコードから表示されるエラーメッセージが最も役立つわけではありません。独自のメッセージでカスタムエラーを投げたい場合は、Valaは構文的な砂糖を提供しません。ifとthrowを使って古風なやり方をしなければなりません。 – chazomaticus