我是Vala编程的新手,并且拥有Java和.NET的经验,但我还没有找到关于如何使用Vala进行日志记录的任何有用的东西。是否有任何有用的日志记录工具,如log4j或log4net,或者建议的方式登录Vala并扩展到几个日志级别,如错误,警告,调试和跟踪? 那么像断言和合同那样的防御性编程呢?是否有任何建议的方法来进行防御性编程并获得具有堆栈跟踪和精确根本原因的最有用的日志? 谢谢你的建议。
答案 0 :(得分: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中细节的外观。祝你好运!
答案 1 :(得分:4)
答案 2 :(得分:1)
我想在@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
,{{ 1}}和debug
代替help
。
我在哪里可以找到每个日志功能的文档?
进一步阅读: