Qslog以及自己封装

一、参考地址

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,则自动打印文件名和代码行数,这个看自己的需要。

posted @ 2020-11-19 15:54  朱小勇  阅读(980)  评论(0编辑  收藏  举报