c++ - log4cplus 不显示所有消息
问题描述
我们正在构建一个模块,它是完整嵌入式 Linux 操作系统的一部分。我们使用 log4cplus 进行诊断。
log.properties包含:
log4cplus.logger.CompanyGlue=TRACE, console
cm_bind_helper.h包含的内容比这复杂得多。所有DBG_XXX消息都出现在控制台上。
#include "qobject.h"
#include "log4cplus/dbglog.h"
class bind_helper : public QObject
{
protected:
const char *debugModuleName = "CompanyGlue";
log4cplus::Logger debugModule { Logger::getInstance(debugModuleName) };
bool set_value(CMPath path, PType &input)
{
auto old_value = CMRoot()->getValue(path);
if (input != old_value) {
DBG_DEBUG("Changing " << path << " to " << input);
}
}
}
cm_bridge.cpp包含比这更多的代码。但是,控制台上不会出现任何DBG_XXX消息。
#include "cm_bridge.h"
#include "cm_bind_helpers.h"
struct CompanyContentModelBridge::detail_ : public bind_helper
{
std::shared_ptr<company::device_base> base;
detail_(QObject *parent)
: bind_helper(parent)
{
configure_system_advanced_control();
}
void configure_system_advanced_control();
std::string get_exported_file_size();
}
using detail_ = CompanyContentModelBridge::detail_;
void detail_::configure_system_advanced_control()
{
base->add_get_only_entry<std::string>("SPDSZ", get_exported_file_size());
}
std::string detail_::get_exported_file_size()
{
DBG_INFO("get exported file size");
//diag("exported file size");
}
我尝试了各种方法在 cm_bridge.cpp 中配置 log4cplus ,包括cm_bind_helpers.h中相同的两行,如下所示。假设继承会处理它,我还删除了它们。没有任何东西使DBG_XXX消息出现。
DBG_IMPL_DEBUG_MODULE(CompanyGlue);
最终,我将此函数添加到cm_bind_helpers.h中。它在从自己的类调用时有效,但在从 get_exported_file_size() 调用时失败(已删除注释)。
void diag(std::string_view what) {
DBG_DEBUG("bind helper diag " << what);
}
我难住了。我不知道为什么消息从一个文件中被抑制,而不是另一个文件。
解决方案
推荐阅读
- python - 张量流函数内的随机整数
- python - 将 3d 点及其颜色映射到不带循环的 2D 图像
- sql - 为什么“wc_get_product_id_by_sku()”函数在循环中返回相同的id?
- mongodb - NestJS - 如何自我引用 mongoDB 架构 @nestjs/mongoose?
- javascript - 如何使用 Konva.Image 模拟背景位置行为?
- sql - SQL查询以选择与其他列中的某些不同元素相关的列中的元素?
- json - 如何通过键索引存储在 S3 中的 JSON 文件?
- arrays - 将列类型更改为数组 Postgresql
- swift - UIStackView 分布,一个子视图的内在内容大小优先
- python - Python attr - 2 个属性的选择