2012-05-01 8 views
8

私はValaプログラミングには新しく、Javaと.NETでの経験はまだありますが、Valaとのログ記録に役立つものは何も見つかりませんでした。 log4jやlog4netのような便利なロギング機能はありますか?また、エラー、警告、デバッグ、トレースなどのいくつかのログレベルにスケーリングしてValaにログインする方法は何ですか? アサーションや契約のような防御プログラミングはどうですか?防御プログラミングを行い、スタックトレースと正確な根本的な原因で最も有用なログを取得するために推奨される方法はありますか? アドバイスをいただきありがとうございます。Valaでロギング

答えて

22

ログ

は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で具体的にどのように見えるかを知ることをお勧めします。がんばろう!

+0

Valaのは契約違反のためにカスタムメッセージをサポートしていますか?それとも、謎めいたデフォルトのエラーメッセージを出すでしょうか?私はエラーをスローする良い方法を見つけようとしており、Valaチュートリアルのデフォルトの "エラー処理"/"契約プログラミング"セクションは本当に有用なものを何も記述していないようです。 – weberc2

+0

契約書はカスタムエラーメッセージをサポートしていないg_return_if_fail()の呼び出しにコンパイルされているようです。そして、生成されたCコードから表示されるエラーメッセージが最も役立つわけではありません。独自のメッセージでカスタムエラーを投げたい場合は、Valaは構文的な砂糖を提供しません。ifとthrowを使って古風なやり方をしなければなりません。 – chazomaticus

3

@chazomaticusに加えて素晴らしい答えがあります。コールスタックを巻き戻して、Valaからstacktraceを取得してください。

これはVala言語に焼き付けられていないことだけです。

は私が書かれているように、このようなライブラリーが起こる:ivy

ivy

私は答えを@chazomaticusする2つのことを追加したいと思い
1

:私は見ることはできないんだけど、なぜ

  1. 任意のデバッグ/ログ出力?

    環境変数G_MESSAGES_DEBUGallに設定する必要があります。これはドキュメンテーションでも言及されていますが、これ以上は説明しません。例えば。 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したい場合は、errorwarningcriticalmessageinfodebughelpの代わりallを使用することができます。

  2. すべてのログ機能のドキュメントはどこにありますか?

さらに読書: