QT使用第三方库log4qt
功能介绍
编译使用log4qt第三方库,并将日志记录在log文件中
下载地址
github下载地址:https://codeload.github.com/MEONMedical/Log4Qt/zip/refs/heads/master
CSDN下载地址:https://download.csdn.net/download/wangyijing666/87828381
编译
将下载好的压缩包解压到相应项目目录
使用Qt Creator打开Log4Qt-master的log4qt.pro文件,打开后选择想要的编译器版本进行编译
注意:
右侧每个运行选项都编译或者运行一次,之前我只对第一个basic进行编译,发现调用会一直报错,后来把所有的都运行一遍就可以导入成功
源码融入项目
在项目的pro文件中添加
QT += concurrent //多线程需要该模块
加入编译log4qt文件
# 定义 Log4Qt 源码根目录
LOG4QT_PATH = $$PWD/Log4Qt-master
# 定义所需的宏
DEFINES += LOG4QT_LIBRARY
# 指定编译项目时应该被搜索的 #include 目录
INCLUDEPATH += $$LOG4QT_PATH/src \
$$LOG4QT_PATH/src/log4qt \
$$LOG4QT_PATH/include \
$$LOG4QT_PATH/include/log4qt
# 将 Log4Qt 源代码添加至项目中
include($$LOG4QT_PATH/src/log4qt/log4qt.pri)
include($$LOG4QT_PATH/build.pri)
include($$LOG4QT_PATH/g++.pri)
在需要的代码片段加入
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "logger.h"
#include "basicconfigurator.h"
#include "fileappender.h"
#include "logstream.h"
#include <QTextCodec>
#include <PatternLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
Log4Qt::BasicConfigurator::configure();
// 创建一个简单布局
auto layout = new Log4Qt::PatternLayout("[%d{yyyy-MM-dd HH:mm:ss.zzz}] %c{1} - %p - %m%n");
// 创建文件 appender
Log4Qt::FileAppender* fileAppender = new Log4Qt::FileAppender(layout, "output.log");
fileAppender->setEncoding(QTextCodec::codecForName("UTF-8"));
fileAppender->setAppendFile(true);
fileAppender->activateOptions();
// 获取日志记录器并添加文件 appender
auto logger = Log4Qt::Logger::rootLogger();
logger->addAppender(fileAppender);
// 输出日志信息到文件中
// 输出日志信息到文件中
// Log4Qt::LogStream(*logger,Log4Qt::Level::INFO_INT) << "This is an info log message.";
// Log4Qt::LogStream(*logger,Log4Qt::Level::WARN_INT) << "This is a warning log message.";
// Log4Qt::LogStream(*logger,Log4Qt::Level::ERROR_INT) << "This is an error log message.";
try {
qDebug()<<QThread::currentThreadId()<<QThread::currentThread();
std::string str = "hello";
char ch = str.at(20); // 越界访问字符串
} catch (const std::exception& e) {
QString errMsg = "Exception caught: " + QString(e.what()); // 将错误消息转换为 QString 类型
// log->error(errMsg.toStdString().c_str()); // 写入错误日志
Log4Qt::LogStream(*logger,Log4Qt::Level::ERROR_INT) << errMsg<<" Thread:"<<QThread::currentThread();
}
查看log文件发现有捕获到异常并记录
[2023-05-27 16:46:34.411] root - ERROR - Exception caught: invalid string position Thread:0x2a5c3b53660
[2023-05-27 16:46:41.087] LoggerRepository - DEBUG - Shutting down Hierarchy