使用Vala进行日志记录

问题描述 投票:9回答:3

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

logging vala defensive-programming
3个回答
23
投票

记录

Vala内置了一些相当强大的测井设施。您可以使用debug()message()warning()error()critical()作为稍微复杂的log()功能的快捷方式。所有都包括在基地(自动包括)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中细节的外观。祝好运!


4
投票

作为@chazomaticus的一个很好的补充,您可以通过展开调用堆栈从Vala获取堆栈跟踪。

只是这并没有融入Vala语言。

我碰巧写了这样一个库:ivy


1
投票

我想在@chazomaticus回答中添加两件事:

  1. 为什么我无法看到任何调试/日志输出? 你必须将环境变量G_MESSAGES_DEBUG设置为all。文档中也提到了这一点,但没有进一步解释。例如。对于debugpublic 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. 我在哪里可以找到每个记录功能的文档? Valadoc - GLib.debug Valadoc - GLib.warning Valadoc - GLib.info Valadoc - GLib.critical Valadoc - GLib.message Valadoc - GLib.error

进一步阅读:

© www.soinside.com 2019 - 2024. All rights reserved.