獲取 Log4Qt 中的 logger

在 Log4Qt 中,有一個很重要的類 - Logger,用于提供日志服務(wù)。由于 Logger 是分層架構(gòu)中的核心對象,處于最上層,所以要想使用 Log4Qt 日志框架,這個對象必不可少(強(qiáng)制性要求)。
要獲取 logger,可以使用以下幾種方式:
調(diào)用
Logger::logger()或者LogManager::logger()使用
LOG4QT_DECLARE_QCLASS_LOGGER使用
LOG4QT_DECLARE_STATIC_LOGGER
來看一些簡單的示例,了解下如何使用它們。
1
調(diào)用 Logger::logger() 或者 LogManager::logger()
通過調(diào)用 Logger::logger() 或者 LogManager::logger() 并將類名作為參數(shù),可以檢索指向 logger 的指針。
來看 Log4Qt 的一個簡單使用,通過基礎(chǔ)配置和 rootLogger()(根 logger,是 Logger::logger() 的一個特殊實現(xiàn))來完成:
// main.cpp
#include <QCoreApplication>
#include <log4qt/basicconfigurator.h>
#include <log4qt/logger.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 一個簡單的基礎(chǔ)配置
Log4Qt::BasicConfigurator::configure();
// 獲取 rootLogger
Log4Qt::Logger* logger = Log4Qt::Logger::rootLogger();
// 輸出
logger->debug("Hello, Log4Qt!");
return a.exec();
}
輸出如下:
4 [0x000002015b78f880] DEBUG root - Hello, Log4Qt!
2
使用 LOG4QT_DECLARE_QCLASS_LOGGER
關(guān)于 LOG4QT_DECLARE_QCLASS_LOGGER,先來了解下它是如何定義的(在 logger.h 中):
#define LOG4QT_DECLARE_QCLASS_LOGGER \
private: \
mutable Log4Qt::ClassLogger mLog4QtClassLogger; \
public: \
inline Log4Qt::Logger *logger() const \
{ return mLog4QtClassLogger.logger(this); } \
private:
可以看到,該宏聲明了一個成員函數(shù),用于檢索使用它的類的 Logger。在第一次調(diào)用時,通過調(diào)用 Logger::logger(const char *pName) 來請求 Logger,指針被存儲以在隨后的調(diào)用中返回。
編寫一個QObject 派生類,然后添加 LOG4QT_DECLARE_QCLASS_LOGGER 宏:
// my_logger.h
#ifndef MY_LOGGER_H
#define MY_LOGGER_H
#include <QObject>
#include <log4qt/logger.h>
class MyLogger : public QObject
{
Q_OBJECT
LOG4QT_DECLARE_QCLASS_LOGGER
public:
void debug(const QString &message) {
logger()->debug(message);
}
};
#endif // MY_LOGGER_H
然后,打印一條簡單的日志信息:
// main.cpp
#include <QCoreApplication>
#include <log4qt/basicconfigurator.h>
#include "my_logger.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 一個簡單的基礎(chǔ)配置
Log4Qt::BasicConfigurator::configure();
// 使用自定義的 logger
MyLogger logger;
logger.debug("Hello, Log4Qt!");
return a.exec();
}
輸出如下:
4 [0x0000015a036ebf20] DEBUG MyLogger - Hello, Log4Qt!
3
使用 LOG4QT_DECLARE_STATIC_LOGGER
和LOG4QT_DECLARE_QCLASS_LOGGER一樣,LOG4QT_DECLARE_STATIC_LOGGER 也被定義在 logger.h 中:
#define LOG4QT_DECLARE_STATIC_LOGGER(FUNCTION, CLASS) \
static Log4Qt::Logger *FUNCTION() \
{ \
static Log4Qt::Logger * p_logger(Log4Qt::Logger::logger(#CLASS )); \
return p_logger; \
}
該宏聲明了一個靜態(tài)函數(shù) FUNCTION,該函數(shù)返回一個指向 Logger 的指針。在第一次調(diào)用時,通過調(diào)用 Logger::logger( #CLASS ) 來請求 Logger,指針被存儲以在隨后的調(diào)用中返回。
使用也非常簡單,對上面的 MyLogger 稍作修改:
// my_logger.h
#ifndef MY_LOGGER_H
#define MY_LOGGER_H
#include <log4qt/logger.h>
LOG4QT_DECLARE_STATIC_LOGGER(logger, MyLogger)
class MyLogger
{
public:
void debug(const QString &message) {
logger()->debug(message);
}
};
#endif // MY_LOGGER_H
輸出如下:
5 [0x00000242cca31490] DEBUG MyLogger - Hello, Log4Qt!
·················· END ··················
關(guān)注后回復(fù)「1024」,獲取海量學(xué)習(xí)資源

