我用c ++编写了一个python模块。一切正常,但现在我想添加日志记录。我的记录器类(第三方)需要初始化类似于:
int main()
{
Logger logger("log.log");
Logger::Register(&logger);
DoSomethingAndLog();
return 0;
}
正如您所看到的,logger
是在程序初始化时创建的,并在程序终止时被破坏。
我将在哪里创建Logger
对象,以便在模块加载时构建它并在卸载模块时进行破坏?
答案 0 :(得分:0)
您可以将Logger
对象包装到一个类中,并声明该类的全局实例。这种方法比原始全局Logger
变量有一点优势,因为您可以在构造函数和析构函数中控制初始化和取消初始化。您还可以限制对Logger
对象的访问权限。
class TheLogger
{
public:
TheLogger() { Logger::Register(&_logger); }
~TheLogger() { Logger::Unregister(&_logger); }
Logger& GetLogger() { return _logger; }
private:
Logger _logger;
};
TheLogger theLogger;
int main()
{
DoSomethingAndLog();
theLogger.GetLogger().Log("...");
return 0;
}