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,则自动打印文件名和代码行数,这个看自己的需要。
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html