如果我在 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/