我是Vala编程的新手,拥有Java和.NET的经验,但我还没有找到有关如何使用Vala进行日志记录的任何有用的东西。是否有任何有用的日志记录工具,如log4j或log4net,或者建议的方式登录Vala并扩展到几个日志级别,如错误,警告,调试和跟踪?那么像断言和合同那样的防御性编程呢?是否有任何建议的方法来进行防御性编程并获得具有堆栈跟踪和精确根本原因的最有用的日志?谢谢你的建议。
记录
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中细节的外观。祝好运!
我想在@chazomaticus回答中添加两件事:
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
。进一步阅读: