首页 > 解决方案 > 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);
}

我难住了。我不知道为什么消息从一个文件中被抑制,而不是另一个文件。

标签: c++linuxlog4cplus

解决方案


推荐阅读