c++ - 如何最好地在我的 C++ 程序中使用相同的 Boost 日志?

标签 c++ visual-c++ boost boost-log

如果我在 Boost 日志文档中遗漏了一个技巧,我深表歉意,但我真的很难弄清楚如何在我的程序中最好地使用 Boost 日志。

我不是一个完整的 C++ 菜鸟,但我远远不能胜任这门语言......!

简而言之:

在主类之外的其他类中使用相同的 Boost 日志的最佳做法是什么?

我的目标是使用存储到文件并显示到控制台的 boost 日志。

setup/main 位工作正常:

主要入口点:

void init();

int main()
{
    /*start logging */

    init();
    logging::add_common_attributes();

    using namespace logging::trivial;
    src::severity_logger< severity_level > lg;
    BOOST_LOG_SEV(lg, info) << "KeyGeo started...";

    //rest of my program objects start here, omitted for brevity......

    return 0;
}

使用初始化函数根据 Boost 文档设置记录器

/* configuration for the boost log */
void init()
{
    logging::add_file_log
    (
        keywords::file_name = "KGLog_%N.log",
        keywords::rotation_size = 10 * 1024 * 1024,
        keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
        keywords::format = "[%TimeStamp%]: %Message%",
        keywords::open_mode = std::ios_base::app,
        keywords::auto_flush = true
    );

    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );

}

但是我如何/如何在我的其他类(class)中使用相同的日志。我可以将“lg”作为参数传递给构造函数或类似的,但这似乎是一种怪异的方式。我尝试了各种示例,例如 src::logger lg 但这些都不起作用。

我在这里放什么?

#include "KGSQLManager.h"
#include "KGResult.h"
#include "stdafx.h"

using namespace logging::trivial;

namespace KeyGeo
{
    class KGDataFactory
    {



       /* SOME BOOST LOG OBJECT IM GUESSING ???! */

        private:
            SQLWCHAR *connStr;
            std::vector< KGResult > results;

        public:
            KGDataFactory();
            KGSQLManager SQLManager;
            void parseSourceGeo();
            void initLogs();

    };
}

最佳答案

我自己解决了这个...

我只需要像这样在第二个类中将记录器定义为相同类型:

namespace KeyGeo
{
    class KGDataFactory
    {

        private:
            SQLWCHAR *connStr;
            std::vector< KGResult > results;

            /* added this.....*/
            src::severity_logger< severity_level > lg;

        public:
            KGDataFactory();
            KGSQLManager SQLManager;
            void parseSourceGeo();
            void initLogs();

    };
}

这样使用:

namespace KeyGeo
{

    /* consturctor for main factory wrapper */
    KGDataFactory::KGDataFactory()
    {
        BOOST_LOG_SEV(lg, info) << "This worked in the class";
    };

关于c++ - 如何最好地在我的 C++ 程序中使用相同的 Boost 日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58777857/

相关文章:

c++ - 对于 ~95% 写入/5% 读取线程安全的 unordered_map 是否有简单的解决方案?

c++ - cmake交叉编译boost链接错误

c++ - 从多个 map<key,value> 中搜索的最佳方式是什么?

c++ - Visual Studio 2013 c++ 文件夹管理

c++ - 将在一个类中创建的 multimap 数据传递给另一个类

c++ - 在遍历多个集合时写回迭代器

c++ - 迭代器和二维 vector

Windows API 相当于 "WMIC QFE Get"

c++ - 如何使用 Boost.Asio C++?

c++ - 正则表达式帮助,匹配产生额外的空格