是否在/var/log/app或者framework.log中?
答案内容由AI生成,仅供参考:
component_dirver组件日志输出位置分析
根据现有信息,component_dirver组件中使用的ilog/elog/dlog接口日志的输出位置取决于是否设置了module_name,具体规则如下:
日志输出机制
核心机制:module_name决定日志去向
module_name是日志系统的关键路由标识,决定了日志消息被写入哪个目标文件(如app.log或framework.log)。- 通过调用
log:set_log_module_name(module_name)函数,可以将当前组件或线程的日志输出绑定到特定模块。 - 如果未设置
module_name,日志将不会被写入任何文件(包括app.log和framework.log),而是被系统静默丢弃。
日志文件归属规则
| 模块名示例 | 日志输出文件 |
|---|---|
bmc_core, ipmi_core 等框架组件 |
framework.log |
firmware_mgmt, sensor, hwdiscovery 等应用组件 |
app.log |
未设置 module_name |
无输出(静默丢弃) |
具体分析
-
若设置了
module_name:日志会根据配置输出到指定文件。- 如果
module_name属于应用/插件类组件(如component_dirver),日志将输出到/var/log/app.log。 - 这是社区推荐和设计的预期行为,也是大多数非框架组件的标准做法。
- 如果
-
若未设置
module_name:日志将不会出现在任何日志文件中。- 这并非Bug,而是OpenUBMC日志系统的设计机制,旨在避免来源不明的日志污染日志文件,确保日志的可维护性和可追溯性。
结论与建议
component_dirver组件的日志是否在/var/log/app.log或framework.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
同时,确保在systemd或Skynet的配置中,已正确定义了 MODULE_NAME 环境变量(例如 MODULE_NAME="component_dirver")。
相关链接:
这个实现都是开源的吧,你看看libmcpp/src/log/appenders/file_appender.cpp
在app.log中