我已经构建了LOG4CXX lib和DLL并尝试在我的应用程序中使用它
Loh.h
class Log
{
public:
Log(void);
~Log(void);
void Debug(const char *msg);
private:
static LoggerPtr oLogger;
};
Log.cpp
LoggerPtr oLogger = NULL;
Log::Log()
{
LoggerPtr oLogger(Logger::getLogger("Test"));
PropertyConfigurator::configure("Logger4CXX.properties");
}
void CLogger::Debug(const char *msg)
{
if(oLogger != NULL)
{
LOG4CXX_DEBUG(oLogger,"Testing application...");
}
}
在我的主要内容中,我正在初始化Log类对象并调用Debug方法将调试消息记录到文件中。
我面临的问题是if(oLogger != NULL
),它总是将oLogger返回为NULL。
任何人都可以提供任何帮助。
答案 0 :(得分:0)
在构造函数中,您将创建名为oLogger的新本地(方法范围)变量,该变量将隐藏同名的类变量。这应该可以解决问题:
Log::Log()
{
oLogger = new LoggerPtr(Logger::getLogger("Test"));
PropertyConfigurator::configure("Logger4CXX.properties");
}
当局部变量超出范围时(方法结束时),它会被破坏。
编辑:
至于你的评论“不喜欢指针”。
您可以使用*oLogger
取消引用它,或者为了避免使用指针,您只需跳过new
关键字。
Edit2:这应该是最安全的方式,没有静态并保持LoggerPtr:
Log::Log() : oLogger(LoggerPtr(Logger::getLogger("Test"))
{
PropertyConfigurator::configure("Logger4CXX.properties");
}
这称为初始化列表。