一、地址
官网地址:Log4Qt
文档地址:Log4Qt: Main Page
源码(Qt4):Log4Qt - Logging for C++/Qt download | SourceForge.net
源码(Qt5):GitHub - MEONMedical/Log4Qt: Log4Qt - Logging for the Qt cross-platform application framework
二、功能
Log4Qt移植自Java中的日志框架-Log4j,并且保持了API一致,(其他库Log4cpp、Log4cplus、Log4cxx)
-
架构:
- 核心对象
- Logger:负责捕获日志信息
- Appender:负责输出日志到,控制台、文件、数据库
- Layou:负责控制输出格式Logger名称,类别,时间戳、日志级别、线程信息等
- 支持对象
- Level:负责控制日志优先级,TRACE < DEBUG < INFO < WARN < ERROR < FATAL,Log4Qt建议使用是个级别:DEBUG、INFO、WARN、ERROR。
日志级别表 级别 值 描述 NULL_INT 0 用于未指定的级别 ALL_INT 32 所有级别(包括自定义级别) TRACE_INT 64 指比 DEBUG 更细粒度的信息事件 DEBUG_INT 96 指细粒度的信息事件(该事件对调试应用程序非常有用) INFO_INT 128 指信息性消息(该消息突出显示了应用程序在粗粒度级别上的进展) WARN_INT 150 指具有潜在危害的情况 ERROR_INT 182 指错误事件(该事件可能仍然允许应用程序继续运行) FATAL_INT 214 指非常严重的错误事件(该事件可能导致应用程序中止) OFF_INT 255 最高等级,用于关闭日志记录 - LogManager:负责从配置文件中读取初始化配置参数
- Filter:负责分析、过滤日志消息
- ObjectRenderer:负责向Logger对象传递字符串
- Level:负责控制日志优先级,TRACE < DEBUG < INFO < WARN < ERROR < FATAL,Log4Qt建议使用是个级别:DEBUG、INFO、WARN、ERROR。
- 核心对象
- 异步日志:异步日志记录提高性能
- 滚动策略:支持配置日志文件大小,超过一定大小自动创建新日志文件
- 集成Qt:对Qt线程、信号槽的支持
- 扩展性:集成现有组件或创建新组件扩展功能
三、日志使用方式
1、方式一
Log4Qt::Logger::logger(QLatin1String("My Logger"))->info("Hello World!");
2、方式二
=======================LogSystem.h=======================
#pragma once
#include <QtWidgets/QWidget>
#include "ui_LogSystem.h"
#include "log4qt/logger.h"
#include "log4qt/basicconfigurator.h"
#include <qstring.h>
class LogSystem : public QWidget
{
Q_OBJECT
LOG4QT_DECLARE_QCLASS_LOGGER
public:
LogSystem(QWidget *parent = nullptr);
~LogSystem();
void debug(const QString& message);
private:
Ui::LogSystemClass ui;
};
=======================LogSystem.cpp====================
#include "LogSystem.h"
LogSystem::LogSystem(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
LogSystem::~LogSystem()
{}
void LogSystem::debug(const QString & message)
{
logger()->debug(message);
}
=======================main.cpp=========================
#include "LogSystem.h"
#include <QtWidgets/QApplication>
#include "log4qt/logger.h"
#include "log4qt/basicconfigurator.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LogSystem w;
w.show();
// 一个简单的基础配置
Log4Qt::BasicConfigurator::configure();
// 获取根 logger
Log4Qt::Logger* logger = Log4Qt::Logger::rootLogger();
// 输出
//logger->debug("Hello, Log4Qt!");
w.debug("LogSystem log");
Log4Qt::Logger::logger(QLatin1String("My Logger"))->info("Hello World!");
return a.exec();
}
3、方式三
=======================LogSystem.h=======================
#pragma once
#include <QtWidgets/QWidget>
#include "ui_LogSystem.h"
#include "log4qt/logger.h"
#include "log4qt/basicconfigurator.h"
#include <qstring.h>
LOG4QT_DECLARE_STATIC_LOGGER(logger, LogSystem)
class LogSystem : public QWidget
{
Q_OBJECT
public:
LogSystem(QWidget *parent = nullptr);
~LogSystem();
void debug(const QString& message);
private:
Ui::LogSystemClass ui;
};
=======================LogSystem.cpp====================
#include "LogSystem.h"
LogSystem::LogSystem(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
LogSystem::~LogSystem()
{}
void LogSystem::debug(const QString & message)
{
logger()->debug(message);
}
=======================main.cpp=========================
#include "LogSystem.h"
#include <QtWidgets/QApplication>
#include "log4qt/logger.h"
#include "log4qt/basicconfigurator.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LogSystem w;
w.show();
// 一个简单的基础配置
Log4Qt::BasicConfigurator::configure();
// 获取根 logger
Log4Qt::Logger* logger = Log4Qt::Logger::rootLogger();
// 输出
//logger->debug("Hello, Log4Qt!");
w.debug("LogSystem log");
Log4Qt::Logger::logger(QLatin1String("My Logger"))->info("Hello World!");
return a.exec();
}
4、方式四
变量 | 描述 |
---|---|
LOG4QT_DEBUG | 控制Log4Qt自身输出日志的级别,前面的logLogger() |
LOG4QT_DEFAULTINITOVERRIDE | 是否忽略默认的初始化(除"false"外均忽略) |
LOG4QT_CONFIGURATION | 用来指定初始化用的配置文件,在前文的例子中我们代码中指定的配置文件,也可以在此指定 |
LOG4QT_CONFIGURATORCLASS | 指定用于初始化程序包的配置程序类 |
使用配置文件,初始化配置过程,需要将Log4Qt::BasicConfigurator::configure();注释掉
首先,查找LOG4QT_CONFIGURATION指定的配置文件,如果不存在,则,读取QSettings中的Log4Qt/Properties/log4Qt.properties中的内容,如果仍不存在,则,读取当前工作目录下的log4Qt.properties文件。
//QSettings设置的默认内容格式如下:
QString exePath = QCoreApplication::applicationDirPath();
QSettings s(exePath + "/Config/Log4Qt.Settings", QSettings::IniFormat);
QStringList groups = s.childGroups();
// 将 Log4Qt 的日志级别设置为 INFO
s.beginGroup("Log4Qt");
s.setValue("Debug", "INFO");
// 配置日志输出至文件 logger.log,使用级别 INFO
s.beginGroup("Properties");
s.setValue("log4j.rootLogger", "INFO, logFile");
s.setValue("log4j.appender.logFile", "org.apache.log4j.FileAppender");
s.setValue("log4j.appender.logFile.file", "./Logs/logger.log");
s.setValue("log4j.appender.logFile.layout", "org.apache.log4j.TTCCLayout");
s.setValue("log4j.appender.logFile.layout.dateFormat", "ISO8601");
//配置文件方式,需要将Log4Qt::BasicConfigurator::configure();注释掉
QString configFIle = QCoreApplication::applicationDirPath() + "/Config/Log4Qt.conf";
if (QFile::exists(configFIle))
{
Log4Qt::PropertyConfigurator::configureAndWatch(configFIle);
}
Log4Qt日志框架 - 日志格式化(02)https://mp.csdn.net/mp_blog/creation/editor/138417616