• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 基于Windows C++ 应用程序通用日志组件的使用详解

基于Windows C++ 应用程序通用日志组件的使用详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了windows c++编译器,c++ windows编程,c++windows窗体程序,c++windows窗口程序,windows10 c++下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

引言

  在如何记录程序日志方面,通常有三种选择:

  1、采用Log4CXX等公共开源日志组件:这类日志组件的特点是跨平台且功能比较强大,例如可以把日志发往另一台服务器或记录到数据库中等;另外,可配置性较高,可以通过配置文件或程序代码对日志进行很多个性化设置。但从另外一个角度看,由于这些优点往往也导致了在使用方面的缺点。首先,对于一般应用程序来说,它们并不需要太多的功能,通常只需要把日志记录到文件或反馈到应用程序,功能太多反正让用户使用起来觉得繁琐还得背负很多从来都用不到的代码。其次,这类日志组件通常是跨平台的,并不只是针对 Windows 或 VC 的应用程序,因此使用起来总会觉得有点别扭,例如他们的字符都是用 char 类型的,对于一个 Unicode 程序来说每次写日志都要做字符转换是很不爽的事情,本座在多年前曾经使用过 Log4Cpp ,程序执行时总是报告日志组件有内存泄露,虽然有可能是误报,但是使用起来总觉得很不舒服。

  2、自己写几个简单的类或函数记录日志:这种方法的确很简单,通常都不用一两百行的代码。但这种方法通常缺乏规范性和通用性,其他程序需要记录类似的但有点差异的日志时,通常的作法是:Copy-Paste-Modify;另外,这类方法很可能也没有考虑性能或并发方面的问题,通常是直接在工作线程中写日志,对于那些性能要求较高的应用程序是绝对不允许的。

  3、干脆不记录任何日志:的确,现在很多程序由于各种原因并没有记录任何日志。但本座以为,如果一个程序是有用的,具备一定功能,并且需要连续运行较长一段时间,那么记录日志是必须的;否则,得认真考虑该程序是否有存在的必要了。
 

设计

  综上所述,编写一个通用的日志组件应该着重考虑三个方面:功能、可用性和性能。下面,本座详细说明在设计日志组件时对这些方面问题的考虑:

  1、功能:本日志组件的目的是满足大多数应用程序记录日志的需求 —— 把日志输出到文件或发送到应用程序中,并不提供一些复杂但不常用的功能。本日志组件的功能包括:

    把日志信息输出到指定文件

    每日生成一个日志文件

    对于 GUI 程序,可以把日志信息发送到指定窗口

    对于Console应用程序,可以把日志信息发往标准输出 (std::cout)

    支持 MBCS / UNICODE,Console / GUI 程序

    支持动态加载和静态加载日志组件 DLL

    支持 DEBUG/TRACE/INFO/WARN/ERROR/FATAL 等多个日志级别

  2、可用性:本日志组件着重考虑了可用性,尽量让使用者用起来觉得简便、舒心:

    简单纯净:不依赖任何程序库或框架

    使用接口简单,不需复杂的配置或设置工作

    提供 CStaticLogger 和 CDynamicLogger 包装类用于静态或动态加载以及操作日志组件,用户无需关注加载细节

    程序如果要记录多个日志文件只需为每个日志文件创建相应的 CStaticLogger 或 CDynamicLogger 对象

    只需调用 Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法记录日志

    日志记录方法支持可变参数

    日志输出格式:<时间> <线程ID> <日志级别> <日志内容>

  3、性能:性能是组件是否值得使用的硬指标,本组件从设计到编码的过程都尽量考虑到性能优化:

    支持多线程同时发送写日志请求

    使用单独线程在后台写日志,不影响工作线程的正常执行

    采用批处理方式批量记录日志






接口

  1、ILogger:日志组件对象接口
 &nb

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • c++利用windows函数实现计时示例
  • 基于Windows C++ 应用程序通用日志组件的使用详解

相关文章

  • 2017-05-28c语言在控制台判定鼠标左键的小例子
  • 2017-05-28C 语言指针变量详细介绍
  • 2017-05-28解析C++中四种强制类型转换的区别详解
  • 2017-05-28C++ Explicit关键字详细解析
  • 2017-05-28浅析C/C++变量在内存中的分布
  • 2022-04-30进制详解:二进制、八进制和十六进制
  • 2017-05-28VC创建DLL动态链接库的方法
  • 2017-05-28C++ 模拟实现list(迭代器)实现代码
  • 2017-05-28深入解读C++中的右值引用
  • 2017-05-28C++ 处理中文符号实例详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言中函数返回字符串的方法汇总
    • 浅析iterator与指针的区别
    • C++ 类中有虚函数(虚函数表)时 内存分布详解
    • wince程序防止创建多个实例实现互斥作用
    • C语言将24小时制转换为12小时制的方法
    • 进制转换:二进制、八进制、十六进制、十进制之间的转换
    • C语言设计图书登记系统与停车场管理系统的实例分享
    • Majority Element
    • 详解C语言求两个数的最大公约数及最小公倍数的方法
    • C语言初学者代码中的常见错误与问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有