在vala日志消息

时间:2018-02-16 23:17:00

标签: logging glib vala

我在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

1 个答案:

答案 0 :(得分:1)

根据G_MESSAGES_DEBUG处理过滤的代码是the default log handler的一部分;如果你实现了一个自定义处理程序,那么你也可以根据你想要的任何设置过滤消息。