11

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

4

3 に答える 3

27

ロギング

Vala にはかなり堅牢なロギング機能が組み込まれています。debug()message()warning()error()critical()を、もう少し複雑なlog()関数のショートカットとして使用できます。すべてがベース (自動的に含まれる)GLib名前空間に含まれます。

ログ出力をリダイレクトしたり、さまざまな種類のメッセージをさまざまな宛先に送信したりする場合、必要なものはすべてGLib.Log名前空間にあります。舞台裏で何が起こっているかについては、logging に関する glib ドキュメントを参照してください。

防御的プログラミング

Vala には、アサーションとコントラクトのサポートも含まれています。短いバージョン: assert()andassert_not_reached()はアサーション用であり、requires()andensures()はコントラクト用のメソッド シグネチャです。詳細については、アサーションとコントラクト プログラミングのチュートリアル セクションを参照してください。

エラー処理

Vala のエラー処理は少し奇妙です。例外と似ていますが、まったく同じではありません。エラー処理に関するチュートリアル セクションでは、基本事項を十分にカバーしています。ここでも、エラーに関する glib ドキュメントを読んで、舞台裏で何が起こっているかをより高度に理解することが役立つ場合があります。私の知る限り、Vala エラーからスタック トレースを取得する方法はありません。タイプとメッセージだけです。

ベストプラクティス

ベスト プラクティスに関しては、Vala は Java や C# と十分に似ているため、既に知っているプラ​​クティスを一般的な意味で適用できると思います。これらの機能をいじって、Vala での詳細がどのように見えるかを把握することをお勧めします。幸運を!

于 2012-05-01T21:05:51.207 に答える
4

@chazomaticus の優れた回答に加えて、コール スタックの幅を広げることで、Vala からスタック トレースを取得できます。

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

私はたまたまそのようなライブラリを書きました:ivy

アイビー

于 2015-04-21T18:07:30.820 に答える
3

@chazomaticus の回答に 2 つのことを追加したいと思います。

  1. デバッグ/ログ出力が表示されないのはなぜですか?

    環境変数G_MESSAGES_DEBUGをに設定する必要がありますall。これはドキュメントでも言及されていますが、それ以上説明されていません。たとえば、デバッグの場合:

    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
    

    出力をさらに制限したい場合は、の代わりに、error、、、およびを使用できます。warningcriticalmessageinfodebughelpall

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

参考文献:

于 2017-12-21T19:37:57.367 に答える