一.环境
Qt 5.15.2
log4qt
二.源码
1.编译 log4qt 源码,生成dll文件,并将.h 拷贝至项目目录
2.main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QDir>
#include "Log4Qt/logmanager.h"
#include "Log4Qt/patternlayout.h"
#include "Log4Qt/consoleappender.h"
#include "Log4Qt/dailyfileappender.h"
//终端输出记录
void InitConsoleLog()
{
QDir dir;
dir.mkdir(QApplication::applicationDirPath() + "../logs/");
//Logger:记录器,有一个根Logger,可以有多个其他Logger
Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();; //根Logger,name为root
// Log4Qt::Logger *mylog1 = Log4Qt::Logger::logger("Mylog1"); //其他Logger,name为Mylog1的
logger->setLevel(Log4Qt::Level::DEBUG_INT); //设置日志输出级别
Log4Qt::LogManager::setHandleQtMessages(true); //处理qt调试输出信息,将qDebug之类的信息重定向,不开启这个qDebug()、qWri
/****************PatternLayout配置日志的输出格式****************************/
Log4Qt::PatternLayout *layout = new Log4Qt::PatternLayout();
layout->setConversionPattern("%d{yyyy-MM-dd hh:mm:ss} [%p] %m %n");
layout->activateOptions(); // 激活Layout
/***************************配置日志的输出位置***********/
//ConsoleAppender:输出到控制台
Log4Qt::ConsoleAppender *appender = new Log4Qt::ConsoleAppender(layout, Log4Qt::ConsoleAppender::STDOUT_TARGET);
appender->activateOptions();
logger->addAppender(appender);
//DailyFileAppender:每天新建一个文件,保存当天的日志,超过指定的天数,删除最开始的日志
Log4Qt::DailyFileAppender *dailiAppender = new Log4Qt::DailyFileAppender;
dailiAppender->setLayout(layout); //设置输出格式
dailiAppender->setFile("logs/console/console.log"); //日志文件名:固定前缀
dailiAppender->setDatePattern("_yyyy_MM_dd"); //日志文件名:根据每天日志变化的后缀
dailiAppender->setAppendFile(true); //true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
dailiAppender->setKeepDays(30); //设置保留天数
dailiAppender->activateOptions();
logger->addAppender(dailiAppender);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
InitConsoleLog();
MainWindow w;
w.show();
return a.exec();
}
3.mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <Log4Qt/logmanager.h>
#include <Log4Qt/patternlayout.h>
#include <Log4Qt/consoleappender.h>
#include <Log4Qt/dailyfileappender.h>
#include <Log4Qt/rollingFileAppender.h>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
void DebugLogs(QString test);
private:
Log4Qt::Logger *logger;
private:
void InitOwnLog();
};
#endif // MAINWINDOW_H
4.mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
DebugLogs("Test Message ");
InitOwnLog();
logger->info("Hello !");
DebugLogs("123456");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::DebugLogs(QString test)
{
qDebug() << "[" << __FILE__ << "][" << __FUNCTION__ << "][" << __LINE__ << "] -> " << test;
}
void MainWindow::InitOwnLog()
{
logger = Log4Qt::Logger::rootLogger();
logger->setLevel(Log4Qt::Level::INFO_INT); //设置日志输出级别
/****************PatternLayout配置日志的输出格式****************************/
Log4Qt::PatternLayout *layout = new Log4Qt::PatternLayout();
layout->setConversionPattern("%d{yyyy-MM-dd hh:mm:ss} [%p] %m %n");
layout->activateOptions(); // 激活Layout
/***************************配置日志的输出位置***********/
Log4Qt::DailyFileAppender *dailiAppender = new Log4Qt::DailyFileAppender;
dailiAppender->setLayout(layout); //设置输出格式
dailiAppender->setFile("logs/ownLogs/ownLogs.log"); //日志文件名:固定前缀
dailiAppender->setDatePattern("_yyyy_MM_dd"); //日志文件名:根据每天日志变化的后缀
dailiAppender->setAppendFile(true); //true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
dailiAppender->setKeepDays(30); //设置保留天数
dailiAppender->activateOptions();
logger->addAppender(dailiAppender);
}
三.运行