component_dirver组件中使用的ilog/elog/dlog接口日志是输出到哪里了?

是否在/var/log/app或者framework.log中?

答案内容由AI生成,仅供参考:

component_dirver组件日志输出位置分析

根据现有信息,component_dirver组件中使用的ilog/elog/dlog接口日志的输出位置取决于是否设置了module_name,具体规则如下:

日志输出机制

核心机制:module_name决定日志去向

  • module_name 是日志系统的关键路由标识,决定了日志消息被写入哪个目标文件(如app.logframework.log)。
  • 通过调用 log:set_log_module_name(module_name) 函数,可以将当前组件或线程的日志输出绑定到特定模块。
  • 如果未设置 module_name,日志将不会被写入任何文件(包括app.logframework.log),而是被系统静默丢弃。

日志文件归属规则

模块名示例 日志输出文件
bmc_core, ipmi_core 等框架组件 framework.log
firmware_mgmt, sensor, hwdiscovery 等应用组件 app.log
未设置 module_name 无输出(静默丢弃)

具体分析

  1. 若设置了 module_name:日志会根据配置输出到指定文件。

    • 如果 module_name 属于应用/插件类组件(如 component_dirver),日志将输出到 /var/log/app.log
    • 这是社区推荐和设计的预期行为,也是大多数非框架组件的标准做法。
  2. 若未设置 module_name:日志将不会出现在任何日志文件中

    • 这并非Bug,而是OpenUBMC日志系统的设计机制,旨在避免来源不明的日志污染日志文件,确保日志的可维护性和可追溯性。

结论与建议

component_dirver组件的日志是否在/var/log/app.logframework.log中,取决于该组件是否在初始化时正确设置了 module_name

建议做法
为确保日志能正常输出,component_dirver组件必须在其入口(如main.lua)中显式设置module_name

-- 在 main.lua 中确保设置模块名
local module_name = skynet.getenv('MODULE_NAME')
if module_name then
    log:set_log_module_name(module_name)
end

同时,确保在systemdSkynet的配置中,已正确定义了 MODULE_NAME 环境变量(例如 MODULE_NAME="component_dirver")。

相关链接:

  1. 一键日志中没有debug日志
  2. openUBMC调试工具安装指导
  3. storage组件的Lua、C++、C日志怎么聚合到同一个文件
  4. 【iTestSmart 1.0.36】设置邮件描述属性成功记录操作日志测试

这个实现都是开源的吧,你看看libmcpp/src/log/appenders/file_appender.cpp

在app.log中