上一篇文章介绍了一下日志库QsLog的基本语法,本文将介绍一下QsLog的基本配置和使用。配合上文一起食用效果更佳哟~
QsLog是一个基于Qt的QDebug类的易于使用的记录器。QsLog是在麻省理工学院许可下以开源形式发布的。
QsLog的特征:
打开QsLog.pri项目,进行编译:
编译步骤相同,只是利用Visual Studio进行编译,生成的是QsLog2.dll和QsLog2.lib(而mingw编译器生成的是Qslog2.dll和QsLog2.a)。
新建一个Qt案例,项目名称为“qslogTest”,基类选择“QWidget”,取消选中创建UI界面复选框,完成项目创建。
在pro文件中添加相应的头文件和lib库文件:
INCLUDEPATH += include/QsLog.h \
include/QsLogDest.h \
include/QsLogDestConsole.h \
include/QsLogDestFile.h \
include/QsLogDestFunctor.h \
include/QsLogDisableForThisFile.h \
include/QsLogLevel.h
LIBS += $$PWD/QsLog/bin/libQsLog2.a
ui界面如下:
头文件中声明两个函数和一个槽函数:
public:
void initLogger();
void destroyLogger();
public slots:
void logSlot(const QString &message, int level);
首先定义相应的头文件和使用命名空间:
#include"QsLog/include/QsLog.h"
#include"QsLog/include/QsLogDest.h"
using namespace QsLogging;
在构造函数中进行初始化,析构函数中进行销毁:
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
initLogger(); //初始化日志
}
Widget::~Widget()
{
delete ui;
destroyLogger();//销毁日志
}
初始化函数:
void Widget::initLogger()
{
// 1. 启动日志记录机制
Logger& logger = Logger::instance();
logger.setLoggingLevel(QsLogging::TraceLevel);
//设置log位置为exe所在目录
const QString sLogPath(QDir(QCoreApplication::applicationDirPath()).filePath("log.txt"));
// 2. 添加两个destination
DestinationPtr fileDestination(DestinationFactory::MakeFileDestination(
sLogPath, EnableLogRotation, MaxSizeBytes(512), MaxOldLogCount(2)));
DestinationPtr debugDestination(DestinationFactory::MakeDebugOutputDestination());
//DestinationPtr functorDestination(DestinationFactory::MakeFunctorDestination(&logFunction));
//这样和槽函数连接
DestinationPtr sigsSlotDestination(DestinationFactory::MakeFunctorDestination(this, SLOT(logSlot(QString,int))));
logger.addDestination(debugDestination);
logger.addDestination(fileDestination);
//logger.addDestination(functorDestination);
logger.addDestination(sigsSlotDestination);
// 3. 开始日志记录
QLOG_INFO() << "Program started";
QLOG_INFO() << "Built with Qt" << QT_VERSION_STR << "running on" << qVersion();
QLOG_TRACE() << "Here's a" << QString::fromUtf8("trace") << "message";
QLOG_DEBUG() << "Here's a" << static_cast<int>(QsLogging::DebugLevel) << "message";
QLOG_WARN() << "Uh-oh!";
qDebug() << "This message won't be picked up by the logger";
QLOG_ERROR() << "An error has occurred";
qWarning() << "Neither will this one";
QLOG_FATAL() << "Fatal error!";
}
析构函数:
//析构
void Widget::destroyLogger()
{
QsLogging::Logger::destroyInstance();
}
槽函数:
//槽函数
void Widget::logSlot(const QString &message, int level)
{
ui->textBrowser->append(qPrintable(message));
}
【注】:如果发现日志显示中文时会显示乱码,则只需将qPrintable修改为qUtf8Printable即可。
完整效果如下:
如果想设置颜色,比如说将FATAL设置为红色,可以修改代码如下:
void Widget::logSlot(const QString &message, int level)
{
if(message.contains("FATAL")){
const QString ss="<font color=\"#FF0000\">";
ui->textBrowser->append(ss + qPrintable(message) + "</font> ");//显示红色的字体
}else{
ui->textBrowser->append(qPrintable(message));
}
}
运行效果如下:
如果没有看懂的话,完整代码可以参考:
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~
参考文章: