当前位置: 首页 > news >正文

linux qt 使用log4cpp库

一、日志库下载

下载地址:https://log4cpp.sourceforge.net/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、日志库解压,编译

1.将文件夹解压出来
在这里插入图片描述
2.进入文件夹内部,打开终端
在这里插入图片描述
3.终端中依次输入以下命令
mkdir build
./configure --prefix=$(pwd)/build
make
make install
一般来说不会报错,在build目录下就可以看到生成的库
在这里插入图片描述

三、使用编译好的库

1.将上面生成的两个文件夹:include lib直接拷贝到测试工程目录下
(自己新建一个测试工程,不用界面)
在这里插入图片描述
(你可以直接放将include lib文件夹放在根目录,我这里新建一个文件夹将它们都放进去)
2.在.pro中写入

LIBS += -L$$PWD/log4cpp/lib/ -llog4cppINCLUDEPATH += $$PWD/log4cpp/include
DEPENDPATH += $$PWD/log4cpp/include

下面直接上代码

//log.h
#ifndef LOG_H
#define LOG_H
#include <QString>
#include <log4cpp/Category.hh>
#include <log4cpp/Appender.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/Layout.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/RollingFileAppender.hh>class Log
{
public:static Log& Instance();void init(QString fileName="");void setConsoleOutput(bool enable = true);void setFilePriority(log4cpp::Priority::Value priority);void setConsolePriority(log4cpp::Priority::Value priority);bool isConsoleEnable();Log(const Log&)=delete;Log&operator=(const Log&)=delete;void debug(const QString &message);void info(const QString &message);void error(const QString &message);void warn(const QString &message);
private:Log();log4cpp::Category& m_category;log4cpp::Appender* m_fileAppender;log4cpp::Appender* m_consoleAppender;bool m_consoleEnabled;
};#endif // LOG_H
//log.cpp
#include "log.h"
#include <QCoreApplication>
#include <QStandardPaths>
#include <QDir>
#include <iostream>
Log& Log::Instance()
{static Log log ;return log;
}void Log::init(QString fileName)
{//文件名QString actualAppName = fileName.isEmpty() ? QCoreApplication::applicationName() : fileName;if (actualAppName.isEmpty()) {actualAppName = "LOG";}// 设置日志文件QString logFileName = QString("%1.log").arg(actualAppName);// 文件Appenderlog4cpp::PatternLayout* fileLayout = new log4cpp::PatternLayout();fileLayout->setConversionPattern("%d [%p] %m%n");m_fileAppender = new log4cpp::RollingFileAppender("fileAppender",logFileName.toStdString(),10 * 1024 * 1024,  // 10MB5);                // 保留5个备份m_fileAppender->setLayout(fileLayout);m_fileAppender->setThreshold(log4cpp::Priority::DEBUG);m_category.addAppender(m_fileAppender);//启动控制台输出setConsoleOutput(true);// 输出日志头m_category.notice("===========================================");m_category.notice(QString("===  %1 Started (v%2) ===").arg(actualAppName).arg(QCoreApplication::applicationVersion()).toStdString());m_category.notice(QString("===  Log file: %1 ===").arg(logFileName).toStdString());m_category.notice("===========================================");
}void Log::setConsoleOutput(bool enable)
{if (enable == m_consoleEnabled) return;if (enable) {log4cpp::PatternLayout* consoleLayout = new log4cpp::PatternLayout();// 彩色控制台输出consoleLayout->setConversionPattern("\033[36m%d\033[0m [\033[32m%p\033[0m] %m%n");m_consoleAppender = new log4cpp::OstreamAppender("console", &std::cout);m_consoleAppender->setLayout(consoleLayout);m_consoleAppender->setThreshold(log4cpp::Priority::DEBUG);m_category.addAppender(m_consoleAppender);} else {if (m_consoleAppender) {m_category.removeAppender(m_consoleAppender);delete m_consoleAppender;m_consoleAppender = nullptr;}}m_consoleEnabled = enable;
}void Log::setFilePriority(log4cpp::Priority::Value priority)
{//设置日志级别,低于priority级别的将不会输出//DEBUG < INFO < NOTICE < WARN < ERROR < CRIT < ALERT < FATAL = EMERGm_category.setPriority(priority);
}void Log::setConsolePriority(log4cpp::Priority::Value priority)
{if (m_consoleAppender) {m_consoleAppender->setThreshold(priority);}
}bool Log::isConsoleEnable()
{return m_consoleEnabled;
}void Log::info(const QString &message)
{m_category.info(message.toStdString());
}void Log::error(const QString &message)
{m_category.error(message.toStdString());
}void Log::warn(const QString &message)
{m_category.warn(message.toStdString());
}void Log::debug(const QString &message)
{m_category.debug(message.toStdString());
}Log::Log():m_category(log4cpp::Category::getInstance("QtLogger")),m_fileAppender(nullptr),m_consoleAppender(nullptr),m_consoleEnabled(false)
{
}
//main.cpp
#include <QApplication>
#include "log.h"
int main(int argc, char *argv[])
{QApplication a(argc, argv);// MainWindow w;// w.show();Log::Instance().init();Log::Instance().setFilePriority(log4cpp::Priority::DEBUG);Log::Instance().setConsolePriority(log4cpp::Priority::INFO);Log::Instance().debug("这是一条debug");Log::Instance().info("这是一条info");Log::Instance().error("zheshi yitiao error");std::cout<<"endl"<<std::endl;return a.exec();

结束

这样可以看到在文件中输出的日志和在控制台输出的日志

http://www.lryc.cn/news/582195.html

相关文章:

  • 对象存储-OSS
  • centos停止维护后更换yum源
  • Centos Docker 安装(100%成功)
  • 腾讯云 CDN 不支持 WebSocket 的现状与华为云 CDN 的替代方案-优雅草卓伊凡
  • 【DPDK应用篇】事件驱动架构:eventdev异步处理模型的设计与实现
  • 循环移位网络设计
  • ubuntu server系统 安装宝塔
  • 【build.gradle中的各种jdk或者是jvm,sdk版本作用区别,详细说明】
  • RKAndroid11-系统设置新增开关选项
  • Kotlin流操作符简介
  • 力扣网编程274题:H指数之计数排序(中等)
  • 分布式推客系统架构设计:从微服务到高性能计算的实践路径
  • 安装 Elasticsearch IK 分词器
  • Coco AI 实战(一):Coco Server Linux 平台部署
  • 前端技术博客汇总文档
  • 万物智联时代启航:鸿蒙OS重塑全场景开发新生态
  • 【读代码】深度解析TEN VAD:实时语音活动检测的高性能开源解决方案
  • 一份激光雷达农业数据的分析
  • 【Linux | 网络】网络编程套接字
  • [netty5: LifecycleTracer ResourceSupport]-源码分析
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ContentPlaceholder(背景占位)
  • 什么是Web3?金融解决方案
  • 康布雷时刻:AI革命中的领导力觉醒与组织重构
  • uniapp下拉刷新+分页组件(z-paging 组件)
  • 2. 你可以说一下 http 版本的发展过程吗
  • 选择排序算法详解(含Python实现)
  • CentOS-7-x86_64解决:使用NAT模式无法ping通www.baidu.com或无法ping 8.8.8.8问题。
  • 阿里arthas(阿尔萨斯)简介
  • 安卓10.0系统修改定制化____recovery-from-boot.p文件的具体作用 在定制项目中的关联
  • v-for的用法及案例