【发布时间】:2018-02-16 23:17:00
【问题描述】:
我的 vala 应用程序代码中有很多 debug(...) 和 info(...) 日志记录,我正在尝试在日志记录中添加时间戳。
我避免使用 set_writer_func,因为它需要 glib "2.50" 而 EOS Loki 是 glib 2.48。下面的 MVCE 给了我正确的输出格式,但我无法设置日志级别,即将级别设置为 INFO 不应输出 DEBUG 消息。
在此先感谢您提供任何帮助/指示。
public class LogTest {
public static int main(string[] args) {
Environment.set_variable ("G_MESSAGES_DEBUG", "all", true);
Log.set_default_handler(
(domain, level, message) => {
domain = "My.Domain";
level = GLib.LogLevelFlags.LEVEL_INFO;
print("[%s] [%s] %s\n", Time.local(time_t()).to_string(), level.to_string(), message);
}
);
debug("logging debug");
info("logging info");
warning("logging warning");
return 0;
}
}
这给出了以下输出,我没想到会出现调试。
[2018-02-16 23:14:53] [G_LOG_LEVEL_INFO] logging.vala:12: logging debug
[2018-02-16 23:14:53] [G_LOG_LEVEL_INFO] logging.vala:13: logging info
[2018-02-16 23:14:53] [G_LOG_LEVEL_INFO] logging.vala:14: logging warning
Granite.Services.Logger 似乎拥有我想要的东西,所以暂时就用它吧。在此处添加 MVCE,以防它使某人受益。
using Granite.Services;
public class LogTest {
public static int main(string[] args) {
Environment.set_variable ("G_MESSAGES_DEBUG", "all", true);
Logger.initialize("My.Domain");
Logger.DisplayLevel = LogLevel.INFO;
debug("logging debug");
info("logging info");
warning("logging warning");
return 0;
}
}
用 valac --pkg=granite logging.vala 编译然后运行:
[INFO 12:44:33.454785] logging.vala:26: logging info
[WARNING 12:44:33.454839] logging.vala:27: logging warning
【问题讨论】: