【问题标题】:How to prefix file name, line, function to glib debug logs如何为 glib 调试日志添加文件名、行、函数的前缀
【发布时间】:2020-02-23 04:39:10
【问题描述】:

我正在开发一种基于 glib 的应用程序。我无法找到将文件名、行号、函数名作为日志前缀的方法。我只是得到以下格式的日志:

(myApp:19627): myApp-DEBUG: 10:01:35.212: 在接口“enp0s20f0u1c2”上收到 IP 数据包: (myApp:19627): myApp-DEBUG: 10:01:35.212: 接口 MAC: 00:0e:09:86:ed:c3 (myApp:19627): myApp-DEBUG: 10:01:35.212: src MAC: ec:8e:b5:d6:42:14 (myApp:19627): myApp-DEBUG: 10:01:35.212: dst MAC: 00:0e:09:86:ed:c3 (myApp:19627): myApp-INFO: 10:01:35.212: IPV4 数据包:*

我已经启用了以下环境变量:

G_MESSAGES_PREFIXED=all  
G_MESSAGES_DEBUG=all

【问题讨论】:

    标签: logging glib


    【解决方案1】:

    如果日志消息是使用g_message() 或任何其他辅助宏创建的,那么文件名、行号和函数都将写入结构化日志数据,这意味着它们出现在 systemd 日志中,而不是 stdout输出。

    查看journalctl --output=verbose 的输出并查找GLIB_DOMAINCODE_FILECODE_LINECODE_FUNC 字段。

    如果你要输出到 systemd 日志以外的东西,那么你需要在你的应用程序中编写自己的日志写入器函数,并使用g_log_set_writer_func() 安装它。它将从日志调用站点接收上述字段,并可以按您希望的格式打印它们。

    【讨论】:

    • 你确定源函数名(__FUNCTION__)是用日志数据写的吗?我有#define g_message(...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, __FILE__, G_STRINGIFY (__LINE__), G_STRFUNC, __VA_ARGS__) 的实现没有__FUNCTION__
    • G_STRFUNC 是函数名。
    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2018-11-10
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多