11

我是 Vala 编程的新手,并且有使用 Java 和 .NET 的经验,但我还没有找到任何有用的关于如何使用 Vala 登录的信息。是否有任何有用的日志记录工具,如 log4j 或 log4net,或者有什么建议的方式来登录 Vala,并扩展到多个日志记录级别,如错误、警告、调试和跟踪?那么像断言和合同这样的防御性编程呢?是否有任何或建议的方法来进行防御性编程并获得带有堆栈跟踪和精确根本原因的最有用的日志?谢谢你的建议。

4

3 回答 3

27

日志记录

Vala 内置了一些相当强大的日志记录工具。您可以使用debug()message()warning()error()critical()作为稍微复杂的log()功能的快捷方式。所有都包含在基本(自动包含)GLib命名空间中。

如果你想重定向日志输出或将不同类型的消息发送到不同的目的地,你需要的一切都在GLib.Lognamespace中。您可能想阅读有关日志记录的 glib 文档,以了解幕后发生的事情。

防御性编程

Vala 还包括对断言和合同的支持。简短版本:assert()andassert_not_reached()用于断言,andrequires()用于ensures()合约的方法签名。有关更多信息,请参阅关于断言和合同编程的教程部分。

错误处理

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 回答中添加两件事:

  1. 为什么我看不到任何调试/日志输出?

    您必须将环境变量设置G_MESSAGES_DEBUGall. 文档中也提到了这一点,但没有进一步解释。例如调试

    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, warning, critical, message, info,debughelp代替all

  2. 在哪里可以找到每个日志记录功能的文档?

进一步阅读:

于 2017-12-21T19:37:57.367 回答