英文网站建设解决方案,我的世界做头像的网站,开发流程和步骤,自己做网站项目log4qt库的使用 一,什么是log4qt?二,log4qt的下载三,如何集成log4qt?1.在vs2022中集成log4qt的方法:模块一:配置log4qt的步骤步骤一,将下好的log4qt库进行解压,然后再库文件中,新建build和Log4Qt文件夹步骤二,打开cmake,有两个填写路径的位置.步骤三,点击cmake的configure按钮… log4qt库的使用 一,什么是log4qt?二,log4qt的下载三,如何集成log4qt?1.在vs2022中集成log4qt的方法:模块一:配置log4qt的步骤步骤一,将下好的log4qt库进行解压,然后再库文件中,新建build和Log4Qt文件夹步骤二,打开cmake,有两个填写路径的位置.步骤三,点击cmake的configure按钮,按照下图进行选择,然后点击finish步骤四,Configuring done之后,点击Generate步骤五,修改cmake的CMAKE_INSTALL_PREFIX路径为步骤一中,我们创建好的Log4Qt文件夹的绝对路径(剧透一下,这个目录,将产生log4qt的动态库,静态库以及库的头文件)步骤六,点击cmake的Open Project步骤七,将编译模式改为Release,然后右击生成ALL_BUILD和INSTALL步骤八,打开集成在vs2022的任意一个qt项目 模块二:当我们集成好log4qt之后,有两种可以使用日志的方式:方式一,直接使用conf文件,在项目中进行加载conf文件,加载好之后,所有的qDebug,qInfo(),qWaring()代码,都会以日志的形式在控制台打印出来,并保存到文本文档中(当然,conf里面的配置文件可以随便改)方式二,不使用conf文件,直接在项目中调用log4qt库中的代码 2.在QtCreator中集成log4qt的方法:步骤一,新建一个qt项目,比如:MyLog4qtProject步骤二,将log4qt库的源码复制,放在MyLog4qtProject\目录下步骤三,配置MyLog4qtProject.pro文件步骤四,配置log4qt.pri步骤五,编辑main.cpp最后一个步骤,编辑log4qt.conf(名字只要以.conf结尾,与main.cpp中初始化的conf文件名一致即可)实现效果 四,关于log4qt.conf理解 一,什么是log4qt?
Log4Qt是一个用于Qt应用程序的开源日志记录库。它是基于Apache Log4j的C实现并提供了一种灵活和可配置的方式来记录应用程序的日志信息。
Log4Qt允许你在应用程序中定义日志记录器、日志级别和日志输出目标并根据需要进行动态配置。它支持多个日志记录器以及不同的日志级别使你能够根据应用程序的需要进行细粒度的日志控制。
使用Log4Qt你可以将日志信息输出到不同的目标例如控制台、文件、网络套接字等。它还支持日志消息的格式化包括日期、时间、日志级别、线程信息等。
Log4Qt 是Log4cpp 的Qt移植版所以看Log4cpp的资料应该是最直接有效的(因为 Log4Qt的直接资料太少了)。
Log4Qt主要是用来记录日志(有助于程序调试)。有3个主要的组件
1. Logger 提供日志记录服务可以有多个Logger存在每个有它们自己的名字。Logger间存在隶属关系有一个Logger称为根Logger。 2. Appender 用来指明将日志记录到什么地方比如控制台、文件、数据库等等 3. Layout 控制日志的输出格式可以类比一下C中的printf。
二,log4qt的下载
log4qt下载地址:
https://github.com/MEONMedical/Log4Qt
三,如何集成log4qt?
1.在vs2022中集成log4qt的方法:
模块一:配置log4qt的步骤
步骤一,将下好的log4qt库进行解压,然后再库文件中,新建build和Log4Qt文件夹 步骤二,打开cmake,有两个填写路径的位置.
一个填log4qt库所在的路径,另一个填build的绝对路径,如下图: 步骤三,点击cmake的configure按钮,按照下图进行选择,然后点击finish 步骤四,Configuring done之后,点击Generate 步骤五,修改cmake的CMAKE_INSTALL_PREFIX路径为步骤一中,我们创建好的Log4Qt文件夹的绝对路径(剧透一下,这个目录,将产生log4qt的动态库,静态库以及库的头文件) 然后再次点击Configuring done,然后点击Generate
步骤六,点击cmake的Open Project 然后,系统将自动打开vs2022,如下图: 步骤七,将编译模式改为Release,然后右击生成ALL_BUILD和INSTALL 当生成完成之后,打开Log4Qt(就是步骤一创建的那个文件夹),就会有如下效果: 步骤八,打开集成在vs2022的任意一个qt项目
1)打开项目属性页 2)在c/c常规中,在附加包含目录下添加生成库的头文件的路径,也就是步骤七生成的include文件夹的绝对路径 然后确定-应用-确定
3)链接器-常规-附加库目录-添加步骤七生成的lib文件夹的绝对路径 4)链接器-输入-附加依赖项-添加log4qt.lib 5)将log4qt.dll放在项目的可执行目录(即存放exe文件的地方) 6)验证一下:
在任意一个cpp文件中添加如下头文件:
#includelog4qt/log4qt.h
#includelog4qt/logger.h
#includelog4qt/layout.h
#includelog4qt/patternlayout.h
#include log4qt/consoleappender.h
#includelog4qt/logmanager.h
#includelog4qt/propertyconfigurator.h然后再cpp文件中加入如下代码进行验证:
Log4Qt::Logger* logger Log4Qt::Logger::logger(MyLogger);
logger-setLevel(Log4Qt::Level::DEBUG_INT); // 设置日志级别为DEBUG// 配置ConsoleAppender 日志输出到控制台
Log4Qt::ConsoleAppender* consoleAppender new Log4Qt::ConsoleAppender();Log4Qt::PatternLayout* layout new Log4Qt::PatternLayout();
layout-setConversionPattern(%d [%t] %-5p %c - %m%n); // 设置日志消息的格式
consoleAppender-setLayout(layout); // 设置布局
consoleAppender-activateOptions(); // 激活Appender配置选项consoleAppender-setThreshold(Log4Qt::Level::DEBUG_INT); // 设置Appender的阈值级别
consoleAppender-activateOptions(); // 激活Appender配置选项// 添加Appender到Logger
logger-addAppender(consoleAppender);// 使用Logger对象记录日志消息
logger-debug(This is a debug message);
logger-info(This is an info message);
logger-warn(This is a warning message);
logger-error(This is an error message);模块二:当我们集成好log4qt之后,有两种可以使用日志的方式:
方式一,直接使用conf文件,在项目中进行加载conf文件,加载好之后,所有的qDebug,qInfo(),qWaring()代码,都会以日志的形式在控制台打印出来,并保存到文本文档中(当然,conf里面的配置文件可以随便改)
目前我改好的conf文件有如下效果:
-将qDebug,qInfo(),qWaring()替换为%d{yyyy,MM,dd HH:mm:ss} [%t] {%l} %-5p %c - %m%n的格式(具体想要以什么格式将信息打印出来,还可以在conf文件中自定义修改)
-在控制台打印信息的同时,还可以将日志信息保存在本地(目前我编辑的这个log4qt.conf文件的效果是:在同级目录下,自动创建一个logs的文件夹,日志文件都会保存在这里面)
-日志文件的名字为当前年月日.log为名字,每天的日志文件都会保存在当天的这个log文件中 方式一的具体操作方法如下:
1)将log4qt.conf放在可执行目录下
如果你是在Release模式下运行,就把log4qt.conf放在Release目录下;
如果你是在Debug模式下运行,就把log4qt.conf放在Debug目录下;我是在Release模式下运行,所以我放在Release目录下,如下图:2)在项目中加载log4qt.conf.
先说一下我的项目结构:
目前我的源文件及头文件只有MainWindow.h,MainWindow.cpp,main.cpp三个文件(当然,qt的ui文件就不说了),我在MainWindow的构造函数中加载(或者说初始化)log4qt.conf之后, 当在mian.cpp中创建完MainWindow 对象之后,项目的其他所有地方的日志系统都会生效. 1)在MainWindow.cpp中加上如下头文件:
#includelog4qt/log4qt.h
#includelog4qt/logger.h
#includelog4qt/layout.h
#includelog4qt/patternlayout.h
#include log4qt/consoleappender.h
#includelog4qt/logmanager.h
#includelog4qt/propertyconfigurator.h2)在MainWindow的构造函数中加入下面两行代码:
Log4Qt::PropertyConfigurator::configure(D:/vs2022/code/QtVTKProject2/build/Release/log4qt.conf);//从log4qt.conf的绝对路径中去加载这个项目(或者改成相对路径也可)
Log4Qt::LogManager::setHandleQtMessages(true);//启用 Log4Qt 库处理 Qt 框架的消息。(即使你已经加载了log4qt.conf文件,但是默认情况下它不会处理 Qt 框架生成的日志消息,所以我们需要进行启动。)3)测试
qDebug() Log4Qt test begin;
qDebug() QString::fromLocal8Bit(我是启用log4qt后的qDebug);
qInfo() QString::fromLocal8Bit(我是启用log4qt后的qInfo);
qWarning() QString::fromLocal8Bit(我是启用log4qt后的qWarning);
//qFatal注释掉了,是因为qFatal一旦调用,系统就会短暂停留两秒,然后立刻终止程序!!!
//qFatal() QString::fromLocal8Bit(我是启用log4qt后的qFatal);
qDebug() Log4Qt test end;运行效果: 方式二,不使用conf文件,直接在项目中调用log4qt库中的代码
方式二的具体操作方法如下:
在项目中,添加如下两个文件:Logger.h与Logger.cpp,然后以在MainWindow.cpp演示为例:
//Logger.h
#pragma once#include log4qt/log4qt.h
#include log4qt/logger.h
#include log4qt/layout.h
#include log4qt/patternlayout.h
#include log4qt/consoleappender.h//输出到控制台
#include log4qt/fileappender.h//重定向到文本文件中
#include log4qt/logmanager.h
#include log4qt/propertyconfigurator.h#include QDate//获取时间
//#include QTextCodec//设置文本编码,但是不能用,因为已经被Qt5.15.2弃用了namespace wxn {class Logger{private:Log4Qt::Logger* logger_;//日志记录器类Log4Qt::ConsoleAppender* consoleAppender_;QDate currentData_;Log4Qt::FileAppender* fileAppender_;QString filename_;Log4Qt::PatternLayout* layout_;public:Logger(QString LogName);~Logger();QString getTime();void init();void Debug(const char* message);void Info(const char* message);void Warn(const char* message);void Error(const char* message);};
}//Logger.cpp
#include Logger.hwxn::Logger::Logger(QString LogName) {logger_ Log4Qt::Logger::logger(LogName);//传入的是日志记录器类的名字consoleAppender_ new Log4Qt::ConsoleAppender();// 配置ConsoleAppender 日志输出到控制台currentData_ QDate::currentDate();fileAppender_ new Log4Qt::FileAppender();layout_ new Log4Qt::PatternLayout();//设置日志格式,布局//}
wxn::Logger::~Logger()
{//if(logger_) delete logger_;//Log4Qt::Logger这个类的析构函数时私有的,不可访问if (consoleAppender_)delete consoleAppender_;//if (currentData_)delete currentData_; //QDate对象会在其作用域结束时自动销毁不需要手动释放。if (fileAppender_)delete fileAppender_;if (layout_)delete layout_;
}QString wxn::Logger::getTime() {int year currentData_.year();int month currentData_.month();int day currentData_.day();return QString::number(year) _ QString::number(month).rightJustified(2, 0) _ QString::number(day).rightJustified(2, 0);//将月份和日期转换为2位数的字符串
}
void wxn::Logger::init()
{logger_-setLevel(Log4Qt::Level::DEBUG_INT); // 设置日志级别为DEBUGlogger_-addAppender(consoleAppender_);// 添加Appender到LoggerQString filename;filename ./logs/;filename getTime();filename .log;fileAppender_-setFile(filename);//设置log文本的位置fileAppender_-setAppendFile(true);//让log内容在文本中追加,而不是每次都重新写入logger_-addAppender(fileAppender_);// 添加Appender到Loggerlayout_-setConversionPattern(%d{yyyy-MM-dd hh:mm::ss} [%t] [%L] %-5p %c - %m%n); // 设置日志消息的格式consoleAppender_-setLayout(layout_);//给控制台设置布局fileAppender_-setLayout(layout_); // 给文本设置布局//对于控制台:consoleAppender_-activateOptions(); // 激活Appender配置选项consoleAppender_-setThreshold(Log4Qt::Level::DEBUG_INT); // 设置Appender的阈值级别//对于输出到文本中:fileAppender_-activateOptions(); // 激活Appender配置选项fileAppender_-setThreshold(Log4Qt::Level::DEBUG_INT); // 设置Appender的阈值级别}void wxn::Logger::Debug(const char* message)
{QString qstr QString::fromUtf8(message); // 将const char*转换为QString// 将消息转换为指定编码QByteArray asciiData qstr.toLatin1(); // 将QString转换为ASCII编码的QByteArraylogger_-debug(asciiData.constData());// asciiData.constData():获取ASCII编码的C风格字符串
}void wxn::Logger::Info(const char* message)
{QString qstr QString::fromUtf8(message); // 将const char*转换为QString// 将消息转换为指定编码QByteArray asciiData qstr.toLatin1(); // 将QString转换为ASCII编码的QByteArraylogger_-info(asciiData.constData());// asciiData.constData():获取ASCII编码的C风格字符串
}
void wxn::Logger::Warn(const char* message)
{QString qstr QString::fromUtf8(message); // 将const char*转换为QString// 将消息转换为指定编码QByteArray asciiData qstr.toLatin1(); // 将QString转换为ASCII编码的QByteArraylogger_-warn(asciiData.constData());// asciiData.constData():获取ASCII编码的C风格字符串
}
void wxn::Logger::Error(const char* message)
{QString qstr QString::fromUtf8(message); // 将const char*转换为QString// 将消息转换为指定编码QByteArray asciiData qstr.toLatin1(); // 将QString转换为ASCII编码的QByteArraylogger_-error(asciiData.constData());// asciiData.constData():获取ASCII编码的C风格字符串
}//MainWindow.cpp
#include MainWindow.h
#include ui_MainWindow.h#include vtkSphereSource.h
#include vtkActor.h
#include vtkPolyDataMapper.h
#include vtkRenderer.h#include Logger.h#include iostreamclass CVector3d {
public:float x;float y;float z;const char* getInfo(){QString information;information x: QString::number(x),y:QString::number(y),z:QString::number(z);QByteArray byteArray information.toUtf8(); // 将 QString 转换为 UTF-8 编码的 QByteArrayreturn byteArray.constData();}};MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow),mRenderWindow(vtkSmartPointervtkGenericOpenGLRenderWindow::New()),mRenderer(vtkSmartPointervtkRenderer ::New()),mInteractor(vtkSmartPointerQVTKInteractor ::New()),mInteractorStyle(vtkSmartPointervtkInteractorStyle ::New())
{ui-setupUi(this);/*****log4qt使用示例-begin******/wxn::Logger *logger new wxn::Logger(MyLogger);logger-init();// 使用Logger对象记录日志消息logger-Debug(This is a new running!);logger-Debug(This is a debug message);logger-Info(This is an info message);logger-Warn(This is a warning message);logger-Error(This is an error message);CVector3d cv3d({1.236,2.347,4.156});logger-Debug(cv3d.getInfo());/*****log4qt使用示例-end******/// Set up the renderingmRenderWindow-AddRenderer(mRenderer);mRenderWindow-SetInteractor(mInteractor);/** 在文件 QVTKOpenGLStereoWidget.cxx 的第 137 行中* 函数 SetRenderWindow 在 VTK 9.0 中已被弃用并将在将来的版本中被移除。* 相反你应该使用 QVTKOpenGLStereoWidget 类提供的 setRenderWindow 函数。*/ui-openGLWidget-setRenderWindow(mRenderWindow);mInteractor-SetInteractorStyle(mInteractorStyle);mInteractor-Initialize();// Set the background colormRenderer-SetBackground(1, 0, 0);//Set the UI connectionsQObject::connect(ui-drawSphere_button, QPushButton::clicked,this, MainWindow::onDrawSphereClick);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::onDrawSphereClick()
{// Create spherevtkSmartPointervtkSphereSource sphereSource vtkSmartPointervtkSphereSource::New();sphereSource-SetRadius(5);sphereSource-Update();//Create the actor where the sphere is renderedvtkSmartPointervtkPolyDataMapper sphereMapper vtkSmartPointervtkPolyDataMapper::New();sphereMapper-SetInputData(sphereSource-GetOutput());vtkSmartPointervtkActor sphere vtkSmartPointervtkActor::New();sphere-SetMapper(sphereMapper);//Add the sphere actor to the OpenGLmRenderer-AddViewProp(sphere);mRenderer-ResetCamera();mRenderWindow-Render();
}2.在QtCreator中集成log4qt的方法:
步骤一,新建一个qt项目,比如:MyLog4qtProject
如图一所示: 步骤二,将log4qt库的源码复制,放在MyLog4qtProject\目录下
1)log4qt库源码的位置
(在你从github上下载的log4qt库的src目录下,有个log4qt文件夹,就是源码)
如图二所示: 2)将log4qt源码放在MyLog4qtProject\目录下
如图三所示: 步骤三,配置MyLog4qtProject.pro文件
1)如果你的项目结构和图三一样,那么你可以直接复制下面的已经配置好内容:
QT core gui network concurrentDEFINES LOG4QT_STATICLOG4QTSRCPATH $$PWD/log4qtINCLUDEPATH -L $$LOG4QTSRCPATH \$$LOG4QTSRCPATH/helpers \$$LOG4QTSRCPATH/spi \$$LOG4QTSRCPATH/variaDEPENDPATH $$LOG4QTSRCPATH \$$LOG4QTSRCPATH/helpers \$$LOG4QTSRCPATH/spi \$$LOG4QTSRCPATH/variainclude($$PWD/log4qt/log4qt.pri)greaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES \main.cpp \MainWindow.cppHEADERS \MainWindow.hFORMS \MainWindow.ui# Default rules for deployment.
qnx: target.path /tmp/$${TARGET}/bin
else: unix:!android: target.path /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS target
与原来的MyLog4qtProject.pro文件相比,新MyLog4qtProject.pro文件有以下变化,
如图四所示: 以下是对新添加的代码的解释:
1.QT core gui network concurrent
我们新引入了network和concurrent模块,
network :提供网络功能(因为日志肯定是要获取当前的时间的)
concurrent :提供多线程和并发编程的支持(日志写入文本,肯定就会用到读写锁,来保证日志的线程安全)2.DEFINES LOG4QT_STATIC
告诉编译器,我们是用静态链接的方法,将Log4Qt 库的代码编译并链接到最终的可执行文件中,而不是作为动态库加载运行.3.LOG4QTSRCPATH $$PWD/log4qt
$$PWD 是一个预定义变量表示当前工程文件的所在路径。
这里将 LOG4QTSRCPATH 设置为当前工程文件所在路径下的 log4qt 目录。4.INCLUDEPATH -L $$LOG4QTSRCPATH \$$LOG4QTSRCPATH/helpers \$$LOG4QTSRCPATH/spi \$$LOG4QTSRCPATH/varia5.DEPENDPATH $$LOG4QTSRCPATH \$$LOG4QTSRCPATH/helpers \$$LOG4QTSRCPATH/spi \$$LOG4QTSRCPATH/varia
INCLUDEPATH 和 DEPENDPATH: 这两个变量用于指定包含和依赖搜索路径。通过将 Log4Qt 的不同子目录添加到这些变量中确保编译器和构建系统能够找到 Log4Qt 源代码所在的位置。
6.include($$PWD/log4qt/log4qt.pri)
用于引入 log4qt.pri 文件。步骤四,配置log4qt.pri
如图五所示: (注:当我们按照步骤三配置好MyLog4qtProject.pro文件后,进行ctrlc保存,编译器会自动加载图五中的log4qt模块)
在log4qt.pri文件的末尾添加如下内容:
INCLUDEPATH -L $$PWD \$$PWD/helpers \$$PWD/spi \$$PWD/variaDEPENDPATH $$PWD \$$PWD/helpers \$$PWD/spi \$$PWD/variaDEFINES LOG4QT_STATIC
LOG4QT_VERSION_MAJOR 1
LOG4QT_VERSION_MINOR 6
LOG4QT_VERSION_PATCH 0DEFINES LOG4QT_VERSION_MAJOR$${LOG4QT_VERSION_MAJOR}
DEFINES LOG4QT_VERSION_MINOR$${LOG4QT_VERSION_MINOR}
DEFINES LOG4QT_VERSION_PATCH$${LOG4QT_VERSION_PATCH}
DEFINES LOG4QT_VERSION_STR\\$${LOG4QT_VERSION_MAJOR}.$${LOG4QT_VERSION_MINOR}.$${LOG4QT_VERSION_PATCH}\\DEFINES QT_DISABLE_DEPRECATED_BEFORE0x050F00
DEFINES QT_DEPRECATED_WARNINGS效果如图六所示: 1.INCLUDEPATH -L $$PWD
$$PWD/helpers
$$PWD/spi
$$PWD/varia2.DEPENDPATH $$PWD
$$PWD/helpers
$$PWD/spi
$$PWD/variaINCLUDEPATH 和 DEPENDPATH: 这两个变量用于指定包含和依赖搜索路径。
$$PWD 表示当前工程文件的所在路径。3.DEFINES LOG4QT_STATIC
LOG4QT_VERSION_MAJOR 1
LOG4QT_VERSION_MINOR 6
LOG4QT_VERSION_PATCH 0用于告诉编译器在静态链接方式下使用 Log4Qt 库。4.DEFINES LOG4QT_VERSION_MAJOR$${LOG4QT_VERSION_MAJOR}
DEFINES LOG4QT_VERSION_MINOR$${LOG4QT_VERSION_MINOR}
DEFINES LOG4QT_VERSION_PATCH$${LOG4QT_VERSION_PATCH}LOG4QT_VERSION_MAJOR, LOG4QT_VERSION_MINOR, LOG4QT_VERSION_PATCH: 这些变量用于定义 Log4Qt 版本号的主、次、修订版本号。DEFINES LOG4QT_VERSION_STR\$${LOG4QT_VERSION_MAJOR}.$${LOG4QT_VERSION_MINOR}.$${LOG4QT_VERSION_PATCH}\这个宏定义用于将 Log4Qt 的完整版本号作为预处理器定义并将其包装在双引号内。5.DEFINES QT_DISABLE_DEPRECATED_BEFORE0x050F00
QT_DISABLE_DEPRECATED_BEFORE0x050F00意味着在 Qt 版本 5.15.0 之前被弃用的功能的警告将被禁用。6.DEFINES QT_DEPRECATED_WARNINGS
QT_DEPRECATED_WARNINGS: 这个宏定义用于启用 Qt 框架中关于已弃用功能的警告信息。(5和6是有语义上是有冲突的,但是一些源代码也是这么写的,实际使用中可任选5或6之一[5和6都写的话,代码也不会中断])步骤五,编辑main.cpp
增加以下内容:
//main.cpp
#include QtDebug
#include logmanager.h
#include propertyconfigurator.hLog4Qt::PropertyConfigurator::configure(a.applicationDirPath() /log4qt.conf);Log4Qt::LogManager::setHandleQtMessages(true);qDebug(start working...);//main.cpp的完整内容:
#include MainWindow.h#include QApplication#include QtDebug
#include logmanager.h
#include propertyconfigurator.hint main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;Log4Qt::PropertyConfigurator::configure(a.applicationDirPath() /log4qt.conf);Log4Qt::LogManager::setHandleQtMessages(true);qDebug(start working...);w.show();return a.exec();
}
最后一个步骤,编辑log4qt.conf(名字只要以.conf结尾,与main.cpp中初始化的conf文件名一致即可)
log4qt.conf的内容如下:
# 设置储存log文件的根目录
logpath.log4j.resettrue
log4j.DebugWARN
log4j.thresholdNULL
# 设置是否监听QDebug输出的字符串
log4j.handleQtMessagestrue
# 在运行中是否监视此文件配置的变化
log4j.watchThisFilefalse# 设置根Logger的输出log等级为All
# 设置Log输出的几种输出源appenderconsole, daily, rolling
log4j.rootLoggerALL, console, daily# 设置终端打印记录器
log4j.appender.consoleorg.apache.log4j.ConsoleAppender
log4j.appender.console.targetSTDOUT_TARGET
log4j.appender.console.layoutorg.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern%d{yyyy,MM,dd HH:mm:ss} [%t] {%l} %-5p %c - %m%n
log4j.appender.console.thresholdALL# 设置一个每日储存一个log文件的记录器
log4j.appender.dailyorg.apache.log4j.DailyFileAppender
log4j.appender.daily.file${logpath}/logs/.log
log4j.appender.daily.appendFiletrue
log4j.appender.daily.datePatternyyyy_MM_dd
log4j.appender.daily.keepDays90
log4j.appender.daily.layout${log4j.appender.console.layout}log4j.appender.daily.layout.ConversionPattern${log4j.appender.console.layout.ConversionPattern}# 给“LoggerObjectPrio”这个类的Logger定义log输出等级为Error
# 给“LoggerObjectPrio”这个类的Logger定义log输出源daily, console
log4j.logger.LoggerObjectPrioERROR
#, rolling# 设置为false表示“LoggerObjectPrio”这个类的logger不继承的rootLogger输出源appender
log4j.additivity.LoggerObjectPriofalse2)将log4qt.conf放在你项目的build目录下
(如果你是以Debug模式下编译的话,就将log4qt.conf放在项目/Debug/debug文件夹下)
效果如图七所示: (如果你是以Release模式下编译的话,就将log4qt.conf放在项目/Release/release文件夹下)
实现效果 四,关于log4qt.conf理解 logpath.设置存储日志文件的根目录为当前目录。
log4j.resettrue重置 Log4j 配置。
log4j.DebugWARN设置 Log4j 调试级别为 WARN。
log4j.thresholdNULL设置 Log4j 阈值级别为 NULL即不限制任何级别的日志输出。
log4j.handleQtMessagestrue设置是否监听 QtDebug 输出的字符串。
log4j.watchThisFilefalse设置在运行时是否监视此文件配置的变化。log4j.rootLoggerALL, console, daily设置根 Logger 的输出级别为 ALL并指定了两个输出源console终端打印和 daily每日文件。针对 console 输出源的配置log4j.appender.consoleorg.apache.log4j.ConsoleAppender指定使用 ConsoleAppender 输出到控制台。
log4j.appender.console.targetSTDOUT_TARGET设置输出目标为标准输出。#TTCCLayout 布局是 Log4Qt 的默认布局
#log4j.appender.console.layoutorg.apache.log4j.TTCCLayout指定使用 TTCCLayout 布局。
#log4j.appender.console.layout.dateFormatyyyy.dd.MM hh:mm:ss 设置日期格式。
#log4j.appender.console.layout.contextPrintingtrue设置是否打印上下文信息。#PatternLayout 布局允许您自定义日志输出的格式
log4j.appender.console.layoutorg.apache.log4j.PatternLayout指定使用 PatternLayout 布局。
log4j.appender.console.layout.ConversionPattern%d{yyyy,MM,dd HH:mm:ss} [%t] {%l} %-5p %c - %m%n
#%d:时间戳。
#%t:线程号。
#%l: 输出日志事件的发生位置包括类目名、发生的线程以及在代码中的行数。
#%p:日志级别。
#%c:类别。
#%m:日志消息。
#%n:换行符。log4j.appender.console.thresholdALL设置输出级别为 ALL。针对 daily 输出源的配置log4j.appender.dailyorg.apache.log4j.DailyFileAppender指定使用 DailyFileAppender 每日文件记录器。
log4j.appender.daily.file${logpath}/logs/.log设置日志文件的路径和名称。
log4j.appender.daily.appendFiletrue设置是否在日志文件末尾追加内容。
log4j.appender.daily.datePatternyyyy_MM_dd设置日期格式模式。
#所以最终log文件的名字是yyyy_MM_dd.loglog4j.appender.daily.keepDays90设置保留日志文件的天数。
log4j.appender.daily.layout${log4j.appender.console.layout}设置布局与 console 输出源相同。log4j.appender.daily.layout.dateFormat${log4j.appender.console.layout.dateFormat}设置日期格式与 console 输出源相同。
log4j.appender.daily.layout.contextPrinting${log4j.appender.console.layout.contextPrinting}设置是否打印上下文信息与 console 输出源相同。对上面daily 输出源的配置的补充
#设置日志文件的文件名:
①将日志文件的文件名设置为年月日.log
log4j.appender.daily.file${logpath}/logs/.log
log4j.appender.daily.datePatternyyyy_MM_dd
②将日志文件的文件名设置为年月日时分秒.log(经过测试,不支持这样的写法)
log4j.appender.daily.file${logpath}/.log
log4j.appender.daily.datePatternyyyy_MM_dd_hh_mm_sserror
log4j.appender.daily.datePatternyyyy_MM_dd_HH_mm_sserror针对 LoggerObjectPrio 类的 Logger 的配置log4j.logger.LoggerObjectPrioERROR, rolling设置 LoggerObjectPrio 类的日志输出级别为 ERROR并指定输出源为 rolling。
log4j.additivity.LoggerObjectPriofalse设置不继承 rootLogger 的输出源。