Advertisement

libglog在C++中的应用与使用技巧

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:7Z


简介:
《libglog在C++中的应用与使用技巧》一文详细介绍了Google开源的日志库libglog在C++编程中的集成方法、配置选项及高级用法,帮助开发者更高效地进行日志记录和调试。 附件包含了一个VS2010的工程文件以及一个C++日志类库——glog。 Google glog是一个用于程序级记录日志信息的c++库,使用方式与c++的stream操作类似: ```cpp LOG(INFO) << Found << num_cookies << cookies; ``` 这里的“LOG”宏为输出关键字,“INFO”则表示消息的重要性级别。 glog的主要功能包括: 1. 参数设置:通过命令行参数来控制日志记录行为; 2. 严重性分级:根据不同的等级进行日志的分类记录; 3. 条件化日志记录,可以基于条件选择是否输出信息; 4. 程序终止判断。提供了丰富的预设条件以决定程序何时停止运行; 5. 异常处理机制,允许自定义异常情况下的操作流程; 6. 支持调试模式:仅在开发阶段启用的日志功能; 7. 自定义日志内容格式和样式; 8. 线程安全的记录方式确保多线程环境中的并发访问问题得到妥善解决; 9. 提供了系统级日志服务,便于追踪整个系统的运行状态。 10. Google特有的perror风格错误信息输出 11. 日志字符串优化以减少冗余。 使用glog的基本步骤如下: - 将glog文件夹复制到源代码目录中。 - 在工程设置中添加附加包含路径(如:`glog/include;`)和库路径(例如:`glog/lib;`),并根据需要在链接器的输入选项里加入相应的lib文件,具体对应关系如下: - MDd: libglog32MDd.lib - MD : libglog32MD.lib - MTd: libglog32MTd.lib - MT : libglog32MT.lib 建议使用MD和MDd配置,以避免内存泄漏问题,并且在需要时将相应的dll文件(位于`glog/bin`目录下)拷贝至程序的输出目录中。 示例代码如下: ```cpp #include using namespace std; // 引入glog头文件,建议放置于stdafx.h内。 #define GLOG_NO_ABBREVIATED_SEVERITIES #include logging.h string GetAppPathA() { char szExePath[MAX_PATH] = {0}; GetModuleFileNameA(NULL,szExePath,MAX_PATH); char *pstr = strrchr(szExePath,\\); memset(pstr+1,0,sizeof(char)); string strAppPath(szExePath); return strAppPath; } int main() { google::InitGoogleLogging(重签程序); string strLogPath = GetAppPathA().append(/LogInfo/); CreateDirectoryA(strLogPath.c_str(),NULL); google::SetLogDestination(google::GLOG_INFO,strLogPath.c_str()); LOG(INFO) << log start...; // 普通日志 LOG(WARNING) << Warning log; // 警告信息 LOG(ERROR) << Error log; // 错误报告 int i = 4; if (i == 4) { LOG_IF(INFO, true) << Log if Test; } return 0; } ``` 此示例展示了如何初始化glog库、配置日志输出路径和使用不同级别的日志记录功能。此外,还有更多高级用法可参考官方文档中的例子。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • libglogC++使
    优质
    《libglog在C++中的应用与使用技巧》一文详细介绍了Google开源的日志库libglog在C++编程中的集成方法、配置选项及高级用法,帮助开发者更高效地进行日志记录和调试。 附件包含了一个VS2010的工程文件以及一个C++日志类库——glog。 Google glog是一个用于程序级记录日志信息的c++库,使用方式与c++的stream操作类似: ```cpp LOG(INFO) << Found << num_cookies << cookies; ``` 这里的“LOG”宏为输出关键字,“INFO”则表示消息的重要性级别。 glog的主要功能包括: 1. 参数设置:通过命令行参数来控制日志记录行为; 2. 严重性分级:根据不同的等级进行日志的分类记录; 3. 条件化日志记录,可以基于条件选择是否输出信息; 4. 程序终止判断。提供了丰富的预设条件以决定程序何时停止运行; 5. 异常处理机制,允许自定义异常情况下的操作流程; 6. 支持调试模式:仅在开发阶段启用的日志功能; 7. 自定义日志内容格式和样式; 8. 线程安全的记录方式确保多线程环境中的并发访问问题得到妥善解决; 9. 提供了系统级日志服务,便于追踪整个系统的运行状态。 10. Google特有的perror风格错误信息输出 11. 日志字符串优化以减少冗余。 使用glog的基本步骤如下: - 将glog文件夹复制到源代码目录中。 - 在工程设置中添加附加包含路径(如:`glog/include;`)和库路径(例如:`glog/lib;`),并根据需要在链接器的输入选项里加入相应的lib文件,具体对应关系如下: - MDd: libglog32MDd.lib - MD : libglog32MD.lib - MTd: libglog32MTd.lib - MT : libglog32MT.lib 建议使用MD和MDd配置,以避免内存泄漏问题,并且在需要时将相应的dll文件(位于`glog/bin`目录下)拷贝至程序的输出目录中。 示例代码如下: ```cpp #include using namespace std; // 引入glog头文件,建议放置于stdafx.h内。 #define GLOG_NO_ABBREVIATED_SEVERITIES #include logging.h string GetAppPathA() { char szExePath[MAX_PATH] = {0}; GetModuleFileNameA(NULL,szExePath,MAX_PATH); char *pstr = strrchr(szExePath,\\); memset(pstr+1,0,sizeof(char)); string strAppPath(szExePath); return strAppPath; } int main() { google::InitGoogleLogging(重签程序); string strLogPath = GetAppPathA().append(/LogInfo/); CreateDirectoryA(strLogPath.c_str(),NULL); google::SetLogDestination(google::GLOG_INFO,strLogPath.c_str()); LOG(INFO) << log start...; // 普通日志 LOG(WARNING) << Warning log; // 警告信息 LOG(ERROR) << Error log; // 错误报告 int i = 4; if (i == 4) { LOG_IF(INFO, true) << Log if Test; } return 0; } ``` 此示例展示了如何初始化glog库、配置日志输出路径和使用不同级别的日志记录功能。此外,还有更多高级用法可参考官方文档中的例子。
  • C++Qt
    优质
    《C++在Qt中的应用技巧》一书深入浅出地介绍了如何利用Qt框架高效开发跨平台的C++应用程序,涵盖从基础到高级的各种实用技术。 《Qt中的C++技术》一书深入剖析了开源开发框架Qt内部的C++技术,并为读者提供了一个优秀的学习案例,帮助他们掌握C++语言以及面向对象设计技巧。书中涵盖了以下内容:类模板特化技术;对比分析了C++标准库和Qt在处理字符串、数据输入/输出方面的不同思路;隐式共享与d-pointer技术的应用;函子及其在QTL(Qt Template Library)中的使用,探讨了如何通过模板特化技术提升QList的性能;介绍了如何将汇编代码嵌入到C++程序中以实现原子操作,并用最小开销进行线程间通信的方法;信号与槽机制详解以及Graphics/View框架等内容。
  • TabControl美化C# Winform
    优质
    本文探讨了如何使用C# WinForms对TabControl控件进行美化,涵盖了多种设计和布局技巧,以提升界面美观度与用户体验。 在C# WinForm开发过程中,TabControl是一个常用的控件,它允许用户通过不同的选项卡来组织和切换内容。然而,默认的TabControl外观可能较为简单,无法满足追求美观界面的需求。本段落将深入探讨如何美化WinForms中的TabControl,使其更具吸引力。 我们可以从以下几个方面进行美化: 1. **改变Tab页的边框样式**:默认情况下,TabControl使用矩形且线条明显的边框。我们可以通过自定义绘制来更改这一样式,例如设置圆角或渐变填充效果。 2. **调整Tab页的位置**:默认位置是顶部,但可以将其设为底部、左侧或右侧以适应不同的布局需求。 3. **自定义字体和颜色**:除了边框外,我们还可以更改标签的字体大小、样式以及选中与未选中的状态显示效果。 4. **添加图片图标**:在每个Tab页上放置相应的图标可以更直观地展示内容,并提高用户体验。 5. **使用皮肤库**:第三方皮肤库如DevExpress和Telerik提供了丰富的预设选项,帮助快速美化TabControl。 6. **动画效果**:通过实现平滑过渡的切换效果(例如淡入淡出、滑动等)来提升交互体验。 7. **自定义Tab页间距和高度**:根据设计需求调整页面间距离及单个Tab的高度以获得最佳视觉效果。 接下来,我们关注一个名为TabControlEx的文件。这很可能是一个扩展类,用于封装上述美化功能。此类通常包括以下方法: - `SetTabStyle`:设置边框样式与填充。 - `SetTabPosition`:更改位置。 - `SetFontAndColors`:定制字体和颜色。 - `AddIconToTabPage`:添加图标到标签页。 - `ApplyAnimation`:实现切换效果的动画功能。 - `AdjustTabSpaces` 和 `SetTabPageHeight` :调整间距与高度。 使用此类,开发者只需调用相应的方法即可轻松完成美化工作,而无需处理复杂的绘制和逻辑细节。总结来说,在WinForms中通过上述方法可以极大提升TabControl的美观度及用户体验,并且可以根据实际需求灵活应用这些技巧来实现个性化设计。
  • VerilogCadence
    优质
    本教程深入讲解了如何在Cadence环境下高效使用Verilog语言进行硬件设计与验证,涵盖了从基础语法到高级调试技巧的应用实例。 介绍了在Cadence中运行Verilog的方法,并与站内已有的《简明Verilog-XL操作手册》相结合,有助于更好地掌握Verilog。
  • value_counts()pandas
    优质
    本文介绍了如何高效地使用Pandas库中value_counts()函数进行数据统计分析,涵盖其基本用法及高级技巧。适合数据分析初学者和进阶者阅读。 在pandas中常用value_counts函数来确认数据出现的频率。对于Series情况而言:pandas 的 value_counts() 函数可以对 Series 中每个值进行计数并排序。 例如,考虑以下代码: ```python import pandas as pd df = pd.DataFrame({ 区域: [西安, 太原, 西安, 太原, 郑州, 太原], 10月份销售: [0.477468, 0.195046, 0.015964, 0.259654, 0.856412, 0.259644], 9月份销售: [略] }) ```
  • MathScriptLabVIEW开发
    优质
    《MathScript在LabVIEW中的应用与开发技巧》是一本专注于LabVIEW环境下利用MathScript进行编程和问题解决的技术书籍。它深入讲解了如何将文本式的数学脚本融入图形化程序设计中,帮助工程师、科学家及其他专业人员提高工作效率,探索更多创新性的解决方案。 本段落档详细介绍了MathScript在LabVIEW中的应用情况,包括其内部机制、使用节点及交互式窗口的方法以及如何结合LabVIEW图形化编程进行数学运算、信号处理与数据分析任务的开发和调试。主要内容涵盖MathScript节点的操作流程、互动式的MathScript窗口特性,并通过多种示例展示其功能,如信号处理、调幅和边缘检测等。此外还强调了MathScript与其他m文件脚本兼容性的优势。 本段落档主要面向具有一定编程基础的工程师和技术人员,特别是那些在算法开发与信号处理等领域使用LabVIEW进行工作的开发者。 文档旨在帮助用户利用LabVIEW环境高效地应用MathScript执行数学运算、信号处理和数据分析任务。通过具体案例及实战演练,使用者可以掌握MathScript节点及交互式窗口的操作方法,并提高算法开发效率以解决实际问题。 文中提供的实例不仅有助于理解MathScript的基本功能,还能激发用户的创新思维。结合LabVIEW强大的图形化编程能力,MathScript能够实现更加复杂的算法开发和系统集成。
  • Easypoi编程
    优质
    本文档将介绍如何高效使用Easypoi工具进行Java开发,包括其配置、快速导入导出Excel数据以及优化代码等方面的实用技巧。 编程不良人使用EasyPoi的教程主要介绍了如何在项目中集成并应用EasyPoi库来简化Excel的操作。该教程详细讲解了从导入依赖到具体使用的步骤,并提供了多个示例帮助开发者快速上手,解决实际开发中的常见问题。 对于初学者而言,通过阅读这份文档可以掌握使用EasyPoi的基本方法和技巧;而对于有一定经验的开发者来说,则可以通过其中提供的高级功能介绍来进一步优化代码结构、提高工作效率。总体来看,《编程不良人》系列教程为不同水平的技术人员提供了一个实用的学习资源库,有助于大家在实际项目中更好地利用EasyPoi实现业务需求。 此外,该文档还总结了一些使用过程中常见的问题及其解决方案,并分享了作者的一些经验和心得,对于想要深入研究Excel操作和报表生成技术的开发者来说非常具有参考价值。
  • C++Timer项目
    优质
    本文章详细探讨了在C++编程语言中使用定时器(Timer)的各种实用技术和案例分析,旨在为开发人员提供优化代码性能和实现复杂功能的有效方法。 本段落主要介绍了C++定时器Timer在项目中的基本使用方法,并通过示例代码进行了详细讲解。文章内容对学习或应用C++具有一定的参考价值,希望需要的朋友可以一起来学习了解。
  • C#DateTime结构使
    优质
    本文将详细介绍在C#编程语言中如何有效地运用DateTime结构进行日期和时间的操作,包括格式化、解析及计算日期差等实用技巧。 C#中的DateTime结构是.NET框架内用于处理日期与时间的关键类型之一。它表示的是一个精确到微秒(即1/10,000,000秒)的时间点,属于值类型而非引用类型的范畴。这意味着在使用时其数据存储于栈中,并且复制操作基于值进行。 **DateTime.Now属性** `DateTime.Now` 属性返回当前系统时间的日期和时间信息。这一静态特性使得我们可以直接通过类名访问而无需实例化对象。例如,我们常用它来获取并显示当前时刻的时间或日期细节。 ```csharp DateTime currentTime = DateTime.Now; Console.WriteLine(currentTime); ``` **DateTime.ToString()方法** `ToString()` 方法将一个 `DateTime` 对象转换为字符串形式,并允许通过格式字符串参数来自定义输出的样式。例如,我们可以使用 yyyy-MM-dd 和 HH:mm:ss 这样的格式来分别显示日期和时间。 ```csharp Console.WriteLine(currentDateTime.ToString(yyyy-MM-dd HH:mm:ss)); ``` **区域性和文化设置** 考虑到不同地区的日期与时间表示形式差异,`ToString(IFormatProvider)` 方法允许我们通过传递特定的 `CultureInfo` 对象(如 ja-JP)来指定输出格式。 ```csharp CultureInfo jaJP = new CultureInfo(ja-JP); DateTime date = new DateTime(2022, 1, 1); Console.WriteLine(date.ToString(jaJP)); ``` **日期和时间运算** `DateTime` 支持与 `TimeSpan` 对象的算术操作,可以轻松地通过加减来调整日期。 ```csharp DateTime futureDate = DateTime.Now.AddDays(7); Console.WriteLine(futureDate); ``` **比较和相等性测试** 对于两个或多个 `DateTime` 实例之间的对比,C# 提供了诸如大于(>)、小于(<)及等于(==、!=)的运算符。此外还提供了通过实现 `IEquatable` 接口来直接使用 `Equals()` 方法进行比较的功能。 ```csharp bool isEqual = date1.Equals(date2); ``` **日期和时间解析** 将字符串转换为 `DateTime` 对象时,可以利用如 `ParseExact` 和 `TryParseExact` 这样的方法,并指定输入的格式模式来完成这一操作。 7. **其他属性与方法** 除了上述介绍的功能外,还有许多其它有用的特性可供探索。例如: - 使用 `Today`, `UtcNow` 属性获取当前日期(不含时间)或协调世界时 (UTC)。 - 利用如 `AddDays()`, `Subtract()` 等方法增加或减少指定的时间间隔。 - 通过调用诸如 `ToShortDateString()` 或者 `ToLongDateString()` 方法得到标准格式的日期字符串。 熟悉这些基本的操作可以帮助开发者在C#项目中更有效地处理时间相关的任务。对于需要进一步复杂功能的应用,可能还需要结合使用如`TimeSpan`, `DateTimeOffset` 类型或UI控件(例如 DateTimePicker)来实现所需的功能。
  • Vue项目使Iview
    优质
    本文将介绍如何在Vue项目中高效地应用Iview框架,并分享一些实用技巧和最佳实践,帮助开发者提升开发效率。 iView 是一套基于 Vue.js 的开源 UI 组件库,主要用于 PC 界面的中后台产品。其主要特性包括: - 高质量、功能丰富的组件; - 友好的 API 和自由灵活地使用空间; - 细致且美观的用户界面设计; - 详尽的事无巨细文档支持; - 支持自定义主题。 安装 iView 的步骤如下: ``` npm install iview --save ``` 在项目中引入 iView 库: ```javascript import Vue from vue import App from ./App.vue import router from ./router import iView from iview // 引入iView库 Vue.use(iView) ```