可视化如何在我的C++程序中最好地使用相同的Boost日志



如果我错过了Boost日志文档中的一个技巧,我很抱歉,但我真的很难找出如何在整个程序中最好地使用Boost日志。

我不是一个完全的C++爱好者,但我在这门语言上还远远不能胜任。。。。!

简而言之:

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

我的目标是使用一个boost日志,它可以存储到文件中,也可以显示到控制台中。

设置/主位工作正常:

主要入口点:

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;
}

带有init函数,可根据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
);
}

但是,我在其他类中如何使用相同的日志呢。我可以将"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";
};

最新更新