`
wenxiehao
  • 浏览: 16822 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

log4cpp 内存泄漏 解决方法

 
阅读更多

  以前一直自己写日志类的框架
  最近了解了一下开源的,感觉功能很强大!呵呵
  使用了老牌的log4cpp 竟然发现有内存泄漏的问题,大概读了一下代码,并找到了这个问题。现放出来让大家也了解下
  感觉这可能是编程习惯问题,如果程序退出时,有些人觉得对象就没必要删除了,因为,整个程序已经退出了,系统会处理一些事情(哪些事情?)
  但是,到了MFC下面,退出时出现这些提示,让人感觉非常不爽!
  内存问题一共三个地方:
  1.NDC 
  对于不同的线程,有不同的数据需要保存,退出时自然需要释放。
  解决方法,增加一个静态的函数
  NDC.h
  void NDC::clearCurrentThreadNDC()
  { _nDC.reset(); }
  在所有用过日志的线程里,最后退出时,加上调用此函数的代码。
  2. template class ThreadLocalDataHolder
  解决方法:
  MSThreads.hh
  inline ~ThreadLocalDataHolder()
  { reset(); TlsFree(_key);  };
  3.Appender 需要在退出时释放
  解决方法:
  Appender 类中增加静态函数:
  void Appender::destroyAppender() { closeAll(); _deleteAllAppenders(); delete _allAppenders;  _allAppenders = NULL; }
  在 HierarchyMaintainer 类中的 构造函数中加入
  HierarchyMaintainer::HierarchyMaintainer() {
  register_shutdown_handler( Appender::destroyAppender );
  }
  完整的代码及库文件在这里下载:http://download.csdn.net/source/3252558
  enjoy
分享到:
评论

相关推荐

    log4cpp源码完整解析

    完整分析了log4cpp的整体架构,详细介绍了log4cpp的这个重要组件的实现分析了log4cpp内部所使用的设计模式。介绍了log4cpp中的Category的完整实现细节,介绍了所有的Layout及其子类的具体实现。也详细介绍了比较常用...

    Log4Cpp使用实例

    自己编译好的log4cpp的DLL 和 LIB 封装了一个使用类,从本地读取配置log级别等信息,可输出多个种类的日志文件,输出示例如下 [2017-02-20 16:09:51.910](NOTICE)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton1...

    log4cpp 已编译好的 DLL 及 lib

    log4cpp用vs2010编译好的DLL 内包括:Debug/Release 两个模式的 log4cppD.lib log4cppD.dll log4cpp.lib log4cpp.dll 四个文件,以及 头文件

    Log4cpp使用档案

    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。网上也已经有了各种各样“教材”,但都太零碎。 本文详细的介绍了Log4cpp的各种用法,包括编译、应用、配置。同时,作者提供了自己的...

    log4cpp-1.1.3代码交叉编译说明

    通过制定版本交叉编译器,对开源代码log4cpp进行编译,之后产生的动态链接库拷贝到arm控制系统中,通过对应用接口的调用实现日志的生成,如果需要二次封装的接口

    C++基于LOG4CPP的使用封装库

    代码是C++,基于LOG4CPP进行封装日志,适用于Linux环境,使用过程时,对其进行继承即可套用其结构

    Log4Cpp日志输出至文件组件最佳实践

    记录了C++中使用Log4Cpp的整体使用源码,具体可参考:http://blog.csdn.net/jptiancai/article/details/23678073

    C++使用Log4cpp

    C++使用Log4cpp记录日志,包括说明文档及相关关键代码、包括log4cpp-1.1.2.tar.gz。

    log4cpp C++开源log

    log log4cpp vc vclog c++log

    vs2008 release模式下编译好的log4cpp 1.1.1

    vs2008 release模式下编译好的log4cpp 1.1.1。内有详细的配置过程描述。已经可以在releases模式下正常编译。

    log4cpp-1.1.3-msvc2017-64bit-dev

    log4cpp-1.1.3,msvc2017-64bit编译版本,dev开发专用,带lib、include、dll。

    log4cpp(添加按日期生成日志类)

    在log4cpp下载的包基础上添加按日期生成日志类,仅供学习和交流

    log4cpp的简单介绍

    附件包含log4cpp相关介绍,用法以及简单实例。供开发人员使用。 可以实现log信息自定义、定制化输出等

    log4cpp-1.1.3.tar.gz源码和测试代码

    log4cpp-1.1.3.tar.gz源码和测试代码

    log4cpp-1.1rc3.tar.gz

    log4cpp-开源日志库,内有VS2010解决方案

    log4cpp Android NDK 开发

    Android NDK开发 log4cpp

    log4cpp Android NDK 测试程序

    log4cpp android ndk

    log4cpp源代码

    log4cpp的源代码。log4cpp是用C++语言编写的日志工具,借鉴了log4j的思想,可以自由配置日志的输出格式、输出文件等,是一个很方便的程序调试、运行追踪工具。

    log4cpp源码

    log4cpp的源码,觉得比较实用,可以供学习C++ STL参考手册

    log4cpp的QtCreator工程

    用log4cpp-1.0的src和include/log4cpp两个文件夹制作的log4cpp的QtCreator4.7.4的static library工程,输出的是liblog4cpp.a文件。

Global site tag (gtag.js) - Google Analytics