log4cplus::Initializer
构造函数调用log4cplus::initialize(),析构函数调用log4cplus::Logger::shutdown()
log4cplus::Initializer m_initializer;//构造函数调用log4cplus::initialize(),析构函数调用log4cplus::Logger::shutdown()
还没完:当你使用了ThreadPool之后,log4cplus总是会在main函数执行之前使用static机制初始化,并创建线程池。如果你在main函数退出的时候没有调用
log4cplus::deinitialize();
则线程池中的线程不会退出。导致main函数无法退出。所以要在main函数退出之前调用这句话,如果不调用,那个log4cplus::Initializer m_initializer;只负责调用shutdown,而不负责调用clearThreadPool。只有log4cplus::deinitialize();才会既clearThreadPool又shutdown。
可以单独封装一个接口,类似如下:
void close()
{
log4cplus::deinitialize();
}
然后在主程序main函数return之前调用该函数即可,如下为Qt程序下的main函数:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
.............. // 应用程序其它代码
.............. // 应用程序其它代码
.............. // 应用程序其它代码
int k = a.exec();
close(); // 让日志库log4cplus中的线程池等资源退出,否则即使main退出了,但主进程依然不会退出
return k;
}
非常详细介绍log4cplus的博客:
https://blog.csdn.net/lx_shudong/article/details/48732999