我在vala应用程序代码中记录了很多debug(...)和info(...),我试图在日志记录中添加时间戳。
我正在避免使用set_writer_func,因为它需要glib" 2.50"而且eOS Loki的表现为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
答案 0 :(得分:1)
根据G_MESSAGES_DEBUG
处理过滤的代码是the default log handler的一部分;如果你实现了一个自定义处理程序,那么你也可以根据你想要的任何设置过滤消息。