一、参考地址
https://blog.csdn.net/zyhse/article/details/106736673
二、git网址
https://blog.csdn.net/zyhse/article/details/106736673
三、源代码使用
3.1、下载,下面勾选的就是需要的源码
3.2、源码加入到自己的工程
3.3、包含源码
.pro里:
3.4、在Qslog.pri里新建类,ZLog
3.5、ZLog定义
Zlog.h
#ifndef ZLOG_H
#define ZLOG_H
#include "QsLog.h"
#define LOG_PATH "./log/log.txt"
#define ZLOG_TRACE() \
if (QsLogging::Logger::instance().loggingLevel() > QsLogging::TraceLevel) {} \
else QsLogging::Logger::Helper(QsLogging::TraceLevel).stream()
#define ZLOG_DEBUG() \
if (QsLogging::Logger::instance().loggingLevel() > QsLogging::DebugLevel) {} \
else QsLogging::Logger::Helper(QsLogging::DebugLevel).stream()
#define ZLOG_INFO() \
if (QsLogging::Logger::instance().loggingLevel() > QsLogging::InfoLevel) {} \
else QsLogging::Logger::Helper(QsLogging::InfoLevel).stream()
#define ZLOG_WARN() \
if (QsLogging::Logger::instance().loggingLevel() > QsLogging::WarnLevel) {} \
else QsLogging::Logger::Helper(QsLogging::WarnLevel).stream()<<FILE_NAME<<LINE_COUNT
#define ZLOG_ERROR() \
if (QsLogging::Logger::instance().loggingLevel() > QsLogging::ErrorLevel) {} \
else QsLogging::Logger::Helper(QsLogging::ErrorLevel).stream()<<FILE_NAME<<LINE_COUNT
#define ZLOG_FATAL() \
if (QsLogging::Logger::instance().loggingLevel() > QsLogging::FatalLevel) {} \
else QsLogging::Logger::Helper(QsLogging::FatalLevel).stream()<<FILE_NAME<<LINE_COUNT
#define FILE_NAME _FILE__
#define LINE_COUNT __LINE__
using namespace QsLogging;
class ZLog
{
public:
static ZLog* instance;
static ZLog* getInstance();
static void setLoggingLevel(const Level& newLevel);
static void setDestIsFile(const QString& path, const int& maxSize, const int& logCount);
static void setDestIsCmd();
protected:
~ZLog();
private:
ZLog();
ZLog(const ZLog&){}
ZLog& operator = (const ZLog&){
return *this;
}
private:
};
#endif // ZLOG_H
setLoggingLevel:设置最小需要处理的日志的等级
setDestIsFile:设置日志输出到文件
setDestIsCmd:设置日志输出到CMD【和setDestIsFile,只设置其中一个就行】
ZLog.cpp
#include "zlog.h"
/*****************************************************************/
//作者:单例初始化
//函数名称:NULL
//函数参数:NULL
//函数返回值:NULL
//函数作用:NULL
//备注:NULL
/*****************************************************************/
ZLog* ZLog::instance = nullptr;
ZLog *ZLog::getInstance()
{
if(nullptr == instance){
instance = new ZLog();
}
return instance;
}
/*****************************************************************/
//作者:朱小勇
//函数名称:设置日志等级
//函数参数:NULL
//函数返回值:NULL
//函数作用:NULL
//备注:当日志真实等级大于这个时就会被使用
/*****************************************************************/
void ZLog::setLoggingLevel(const Level& newLevel)
{
Logger& logger = Logger::instance();
logger.setLoggingLevel(newLevel);
}
/*****************************************************************/
//作者:朱小勇
//函数名称:设置文件输出到文件
//函数参数:NULL
//函数返回值:NULL
//函数作用:NULL
//备注:NULL
/*****************************************************************/
void ZLog::setDestIsFile(const QString &path, const int &maxSize, const int &logCount)
{
Logger& logger = Logger::instance();
DestinationPtr fileDestination(DestinationFactory::MakeFileDestination(path, EnableLogRotation, MaxSizeBytes(maxSize), MaxOldLogCount(logCount)));
logger.addDestination(fileDestination);
}
/*****************************************************************/
//作者:朱小勇
//函数名称:设置文件输出到控制台
//函数参数:NULL
//函数返回值:NULL
//函数作用:NULL
//备注:NULL
/*****************************************************************/
void ZLog::setDestIsCmd()
{
Logger& logger = Logger::instance();
DestinationPtr debugDestination(DestinationFactory::MakeDebugOutputDestination());
logger.addDestination(debugDestination);
}
/*****************************************************************/
//作者:朱小勇
//函数名称:构造函数
//函数参数:NULL
//函数返回值:NULL
//函数作用:NULL
//备注:NULL
/*****************************************************************/
ZLog::ZLog()
{
}
/*****************************************************************/
//作者:朱小勇
//函数名称:析构函数
//函数参数:NULL
//函数返回值:NULL
//函数作用:NULL
//备注:NULL
/*****************************************************************/
ZLog::~ZLog()
{
QsLogging::Logger::destroyInstance();
delete instance;
instance = nullptr;
}
3.6、使用
#include "zlog.h"
if(LOG_DEST_FILE){
ZLog::getInstance()->setDestIsFile(LOG_PATH,
LOG_FILE_SIZE,
LOG_FILE_COUNT);
ZLog::getInstance()->setLoggingLevel(InfoLevel);
ZLOG_INFO() << "zlog inited, log will be append to file";
}else{
ZLog::getInstance()->setDestIsCmd();
ZLog::getInstance()->setLoggingLevel(InfoLevel);
ZLOG_INFO() << "zlog inited, log just append to cmd";
}
ZLOG_INFO() << "zlog inited, log just append to cmd";
ps:
①、原来的Qslog也可以直接使用,但是设置的地方有点多,我定义了了一个自己的单例类:ZLog,只需要两个步骤:
1、setDestIsFile或者setDestIsCmd
2、setLoggingLevel
即可在工程里任意使用日志功能:【需要包含zlog.h】
ZLOG_TRACE()
ZLOG_DEBUG()
ZLOG_INFO()
ZLOG_WARN()
ZLOG_ERROR()
ZLOG_FATAL()
四、动态库使用
待研究
PS:
20211117修改,如果调用ZLOG_ERROR及ZLOG_FATAL,则自动打印文件名和代码行数,这个看自己的需要。
所有评论(0)