QT使用log4cpp日志库

news2024/9/24 21:19:01

文章目录

  • QT使用log4cpp日志库
    • 1. 从官网下载log4cpp源码
    • 2. 编译项目
    • 3. 在QT中使用log4cpp
    • 4. log4cpp
      • 4.1. Category
      • 4.2. Appender
      • 4.3. Layout
      • 4.4. Priority
      • 4.5. 使用宏定义为日志加上文件名 函数名 行号等

QT使用log4cpp日志库

1. 从官网下载log4cpp源码

  • log4cpp官方网址
    在这里插入图片描述
  • 下载后解压到文件夹如图,打开mscv10文件夹

在这里插入图片描述

  • 双击打开msvc10.sln文件,vs版本较高打开后会提示升级项目点击确定就好
    在这里插入图片描述
    在这里插入图片描述

2. 编译项目

    1. 我使用的是64位的,一开始只有win32没有x64的选项,点击配置管理器添加x64
      在这里插入图片描述
  • 选择新建x64
    在这里插入图片描述

在这里插入图片描述

  • 我编译的是x64的release版本

在这里插入图片描述

    1. log4cpp处右键点击属性

在这里插入图片描述

    1. 在预处理器定义处增加HAVE_SNPRINTF

在这里插入图片描述

    1. 找到log4cpp下的NTEventLogCategories.mc右键属性

在这里插入图片描述

  • 在命令行点击编辑

在这里插入图片描述

    1. 改为以下命令
if not exist $(OutDir) md $(OutDir)
mc.exe -h $(OutDir) -r $(OutDir) $(ProjectDir)..\%(Filename).mc
RC.exe -r -fo $(OutDir)%(Filename).res $(OutDir)%(Filename).rc
link.exe /MACHINE:IX86 -dll -noentry -out:$(OutDir)NTEventLogAppender.dll $(OutDir)%(Filename).res

在这里插入图片描述

  • 倘若需编译log4cppLIB则需对log4cppLIB也执行以上2-5步操作
  • 如需编译整个工程还需对testDailyRollingFileAppender下的testDailyRollingFileAppender.cpp的第43行增加一个空格,即由下图的1改为2

在这里插入图片描述

在这里插入图片描述

  • 在log4cpp处右键生成

在这里插入图片描述

  • 编译成功

在这里插入图片描述

在这里插入图片描述

  • 对log4cpp项目编译后生成的lib和dll文件在log4cpp\msvc10\x64\Release文件夹下
    在这里插入图片描述

3. 在QT中使用log4cpp

    1. 在.pro文件中包含log4cpp的头文件,链接库文件。如下图:
      在这里插入图片描述

  • 踩的一些坑:一开始老是提示无法解析的外部符号,后来发现是在.pro文件链接库时,最后忘记加\导致没链接上

在这里插入图片描述

  • 加上\后运行报错LNK1112:模块计算机x86与目标计算机x64冲突,因为我一开始时直接编译的win32的改成第一步提到的x64再编译过就好了
    在这里插入图片描述

  • 关于log4cpp的比较关键的概念,整理自网络仅供参考

4. log4cpp

  • 结构:日志类别(Category),日志追加器(Appender),日志布局(Layout),日志级别(Priority)

使用流程

  1. 创建一个Appender,指定包含的格式Layout
  2. 从系统中得到Category的根,将Appender添加到Category中
  3. 设置Category的优先级
  4. 记录日志
  5. 关闭Category

4.1. Category

  • 日志输出主体类:设置类别优先级,低于此优先级的类都不再输出 ,每个应用程序都有一个root分类,他分类都是root分类的子分类,子分类的输出同时会输出到父分类中。
  • 日志的常用优先级:DEBUG < INFO < WARN < ERROR < FATAL
// 根分类root 大多数情况下一个应用程序只需要一个日志种类
log4cpp::Category& root = log4cpp::Category::getRoot();
// 子分类subCat1 不同的子categor用于不同的场合
log4cpp::Category& sub1 = log4cpp::Category::getInstance("sub1");

4.2. Appender

  • 确定日志输出行为:
    • 输出位置:有些Appender类没有设置互斥,不要使用一个Appender加载到多个Category中
    • 输出方式:
      • OstreamAppender:输出到输出流中(输出到控制台上)
      • FileAppender:输出到文件中
      • RollingFileAppender:输出到文件中并且能够设置文件最大超过多少时生成新文件
      • DailyRollingFileAppender:每天生成一个新文件
      • NTEventLogAppender:将日志输出到Windows事件日志中去
      • StringQueueAppender:内存队列
      • SyslogAppender:本地syslog
      • Win32DebugAppender:发送到缺省系统调试器
      • IdsaAppender:发送到IDS
      • RemoteSyslogAppender:输出到远程syslog服务器

4.3. Layout

  • BasicLayout
  • SimpleLayout 提供的成型的简单日志风格
  • PatternLayout 对日志做格式输出
  • layout是加载到Appender中去的

4.4. Priority

  • 日志级别
typedef enum
{
    EMERG  = 0,     // emergency
    FATAL  = 0,     // fatal
    ALERT  = 100,   // alert
    CRIT   = 200,   // critical
    ERROR  = 300,   // error
    WARN   = 400,   // wanning
    NOTICE = 500,   // notice
    INFO   = 600,   // infomation
    DEBUG  = 700,   // debug
    NOTSET = 800   
} PriorityLevel;

4.5. 使用宏定义为日志加上文件名 函数名 行号等

#define suffix1(msg) std::string(msg).append(" [")\
    .append(__FILE__).append("] [")\
    .append(__FUNCTION__).append("] [")\
    .append(std::to_string(__LINE__)).append("] ").c_str()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatisPlus ---- 常用注解

MyBatisPlus ---- 常用注解1. TableNamea>问题b>通过TableName解决问题c>通过全局配置解决问题2. Tablelda>问题b>通过TableId解决问题c>TableId的value属性d>TableId的type属性e>雪花算法3. TableFielda>情况1b>情况24. TableLogica>逻辑删除…

LeetCodeday03

203.移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1…

基于springboot+mybatis+mysql+html实现医院预约挂号管理系统

基于springbootmybatismysqlhtml实现医院预约挂号管理系统一、系统简介二、系统主要功能界面2.1登陆2.2首页&#xff08;留言板、我的预约&#xff09;--用户2.3就诊预约--用户2.4我的预约--用户2.5我参与的评介--用户2.6我的预约日程--医生2.7对我的评介--医生2.8医生管理--管…

一文探索“预训练”的奥秘!

Datawhale干货 作者&#xff1a;王奥迪&#xff0c;单位&#xff1a;中国移动云能力中心2022年下半年开始&#xff0c;涌现出一大批“大模型”的优秀应用&#xff0c;其中比较出圈的当属AI作画与ChatGPT&#xff0c;刷爆了各类社交平台&#xff0c;其让人惊艳的效果&#xff0c…

[思维模式-19]:《复盘》-7- “积”篇 - 操作复盘- 如何做好复盘

目录 一、联想&#xff1a;复盘的五个误区与七个关键成功要素 1.1 五个误区 1.2 七个关键成功要素 二、复盘的25个“坑”及对策建议 2.1 回顾、评估阶段 2.2 分析、反思阶段 2.3 萃取、提炼阶段 2.4 转化、应用阶段 2.5 复盘引导阶段 三、有效复盘的三项核心技能 3.…

java常见问题处理

文章目录一、前言二、实战演练1、idea常用快捷键使用2、idea设置字体大小3、idea设置背景颜色-背景4、idea配置Maven5、idea中配置JDK6、idea中java.util变红报错IDEA中Sources、JavaDocs路径是红色的7、idea中使用mybatisPlus 自增主键失效&#xff0c;自增主键超大小知识点8、…

ZI-data RO-data RW-data Code BSS DATA

KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释&#xff08;转&#xff09; - 酒醉的Tiger - 博客园源&#xff1a;KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释KEIL RVMDK编译后的信息Program Size: Code86496 RO-datahttps://ww…

STM32MP157驱动开发——Linux 音频驱动

STM32MP157驱动开发——Linux 音频驱动一、简介1.CS42L51 简介2.I2S总线3.STM32MP1 SAI 总线接口二、驱动开发1.音频驱动1&#xff09;修改设备树i2c 接口&#xff1a;1.8v电源管理&#xff1a;2&#xff09;SAI 音频接口设备树3&#xff09;sound 节点2.使能和修改内核的 CS42…

linux系统中字符设备驱动开发方法

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;linux系统中的字符设备驱动实现的基本过程。 目录 第一&#xff1a;字符设备驱动简介 第二&#xff1a;字符设备驱动开发步骤 第三&#xff1a;编写字符设备驱动实验程序 第一&#xff1a;字符设备驱动简介 字符设备是Li…

130道基础OJ编程题之: 58 ~ 67 道

130道基础OJ编程题之: 58 ~ 67 道 文章目录130道基础OJ编程题之: 58 ~ 67 道0. 昔日OJ编程题:58. BC61 金字塔图案59. BC62 翻转金字塔图案60. BC63 菱形图案61. BC64 K形图案62. BC65 箭形图案63. BC66 反斜线形图案64. BC67 正斜线形图案65. BC68 X形图案66. BC69 空心正方形…

电商大促话术

每逢节日&#xff0c;各大电商平台为了迎合节日气氛&#xff0c;会有各种大促活动&#xff0c;客户咨询量都会较平日有所增加&#xff0c;为了接待更多的客户&#xff0c;客服要掌握一定的电商大促话术。 前言 每逢节日&#xff0c;各大电商平台为了迎合节日气氛&#xff0c;会…

Python--数据容器

文章目录一、数据容器数据容器特点对比二、序列三、列表(list)3.1、列表定义&#xff1a;3.2、列表下标索引3.3、列表常用方法&#xff1a;3.4、list遍历四、元组(tuple)4.1、元组定义4.2、元组的常用方法4.3、元组的遍历五、字符串(str)5.1、字符串定义5.2、常用方法5.3、字符…

Unity 3D 资源下载 || Unity 3D 综合案例

Unity 3D 资源下载 你也可以在 Unity 3D 中执行 Window → Asset Store 菜单命令直接访问 Unity 资源商店&#xff08;Asset Store&#xff09;。 Unity 资源商店简介 Unity 资源商店https://www.assetstore.unity3d.com/ 中提供了多种类的游戏媒体资源&#xff08;人物模型…

某微1day后台RCE审计漏洞

某应用存在后台RCE&#xff0c;根据相关信息&#xff0c;我们在对后台审计过程&#xff0c;这里发现一处调用newInstance实例化溯源找到InterfaceRegisterCustomOperationCmd #excute访问路径为 /api/integration/workflowflow/getInterfaceRegisterCustomOperationgetInterfac…

腾讯云域名备案以及ssl证书申请部署springboot

网站备案 1. 先进行网站备案 网站&#xff1a;https://console.cloud.tencent.com/beian 2. 然后在进行公安备案 流程&#xff1a;https://cloud.tencent.com/document/product/243/19142 3. 再在网站中添加备案号 #示例代码如下&#xff1a; <a href"https://b…

计算机网络——ICMP协议

ICMP 支持主机或者服务器实现差错或者异常的探寻。ICMP的功能体现即发送特定的ICMP报文 类型&#xff1a;ICMP属于哪一类的 代码&#xff1a;是为了进一步区分某种类型中不同的情况 检验和&#xff1a;检验整个ICMP报文 ICMP报文 1 终点不可达类型&#xff1a;当路由器或者…

excel超链接应用:快速生成目录的几个方法-上

在平时工作中&#xff0c;为了能快速打开需要的工作表&#xff0c;我们通常会设置一个目录。目录的设置方法有很多种&#xff0c;但大多数人使用的方法还是基本的手动插入超链接的操作。虽然这个方法也行&#xff0c;但是将大大降低你的工作效率&#xff0c;那么今天&#xff0…

【eiseg教程,快速给语义分割任务打标签】

eiseg教程1.安装EISeg2.载入模型权重3.添加类别标签4.设置格式5.标注图片6.部分按键/快捷键eiseg是百度开发的半自动标注工具&#xff0c;可以快速给语义分割任务打标签&#xff0c;提高工作效率。1.安装EISeg &#xff08;1&#xff09;新建一个python3.8的虚拟环境 &#xf…

3D Diffusion模型来了!OpenAI出品,已开源

文&#xff5c;天于刀刀2022年不愧是 AIGC 行业元年。伴随着 ChatGPT 的大火使得谷歌一周之内改口“会认真评估 ChatGPT 对搜索引擎的影响”&#xff0c;OpenAI 在 3D 图像生成领域进一步放出了大招开源项目“Point-E” [1]&#xff0c;可玩程度不下于 ChatGPT&#xff01;简单…

Spring AOP源码探究

1. 前言 Spring除了IOC和DI&#xff0c;还有另一个杀手锏功能——Spring AOP。AOP是一种面向切面的编程思想&#xff0c;它的关注点是横向的&#xff0c;不同于OOP的纵向。面向对象编程时&#xff0c;如果我们要给多个类引入同一个行为&#xff0c;唯一的方式就是使用继承&…