Log4Qt日志框架 - 输出日志(01)

一、地址

官网地址: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)

  1. 架构:

    1. 核心对象
      1. Logger:负责捕获日志信息
      2. Appender:负责输出日志到,控制台、文件、数据库
      3. Layou:负责控制输出格式Logger名称,类别,时间戳、日志级别、线程信息等
    2. 支持对象
      1. Level:负责控制日志优先级,TRACE < DEBUG < INFO < WARN < ERROR < FATAL,Log4Qt建议使用是个级别:DEBUG、INFO、WARN、ERROR。
        日志级别表
        级别描述
        NULL_INT0用于未指定的级别
        ALL_INT32所有级别(包括自定义级别)
        TRACE_INT64指比 DEBUG 更细粒度的信息事件
        DEBUG_INT96指细粒度的信息事件(该事件对调试应用程序非常有用)
        INFO_INT128指信息性消息(该消息突出显示了应用程序在粗粒度级别上的进展)
        WARN_INT150指具有潜在危害的情况
        ERROR_INT182指错误事件(该事件可能仍然允许应用程序继续运行)
        FATAL_INT214指非常严重的错误事件(该事件可能导致应用程序中止)
        OFF_INT255最高等级,用于关闭日志记录

      2. LogManager:负责从配置文件中读取初始化配置参数
      3. Filter:负责分析、过滤日志消息
      4. ObjectRenderer:负责向Logger对象传递字符串
  2. 异步日志:异步日志记录提高性能
  3. 滚动策略:支持配置日志文件大小,超过一定大小自动创建新日志文件
  4. 集成Qt:对Qt线程、信号槽的支持
  5. 扩展性:集成现有组件或创建新组件扩展功能

三、日志使用方式

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环境变量
变量描述
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)icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/138417616

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值