- 浏览: 197172 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (231)
- C++学习 (41)
- vc学习 (25)
- vc异常 (4)
- Flex (2)
- Ext (0)
- java学习笔记 (15)
- mysql学习笔记 (1)
- ibatis学习笔记 (7)
- struts1学习笔记 (1)
- hibernate学习笔记 (3)
- javascript学习笔记 (8)
- eclipse快捷键 (2)
- 英语学习 (1)
- cmd (1)
- eclipse 配置 (2)
- 其他 (4)
- JAVASE (34)
- firefox (1)
- linux (8)
- Apache (6)
- cms (22)
- jsuc (10)
- html (3)
- css (1)
- 作图 (2)
- vs2012 (2)
- 编码转换 (12)
- work_unicode (1)
- work_webbrowser (1)
- work_trade_quotes_login (1)
- c#学习 (38)
- wpf学习 (31)
- wpf快速学习 (1)
- VB学习 (1)
- NSIS (4)
- log4cpp (3)
- 学习web (1)
- 经验 (1)
- c_汇编 (1)
最新评论
log4CPP多线程支持的缺角(一)log4CPP是一款优秀的c++日志开源软件,虽然从很早的时代就宣称了对于多线程的支持,而且源码中有很好的利用栈对象封装互斥锁,一种很好的使用资源实践;而且下载下来用vc6编译,也能检查到其连接的c语言库函数设定的为multiThread DLL,所以,从骨架上支持多线程应该没有多少疑问。
但是对于RollingFileAppender,实现文件日志循环打印的日志输出的类,对于多线程的支持是不够好的,可以从其实现代码对于文件描述符fd的操作看出来。 有读、有写、有关闭,但是代码里面却没有半点进行多线程的保护。
这样的实现版本,对于每个日志Category类别具有一份独立的文件RollingFileAppender,也是没有问题的。log4CPP在Category上输出日志,因为需要遍历所有的appender,以及与其他appender集合的操作互斥,而不得不加上锁。这把锁也在实际上也保护了文件操作,每一个日志类别具有独立的appender,直接使用log4cpp默认实现,则不受到影响。但如果情况恰恰是相反,很多Category仅对应一个RollingFileAppender的话,则RollingFileAppender的实现不足以保护多线程访问。
在我们的实践中,表现为日志文件超过了设定的大小,也不进行分拆,而是日志文件持续增大。对于此故障现象,怀疑为系统内部已经异常,因此也还出现其他的一些怪现象。但不是非常确切地知道是否于此有关,所以此文件标题用(一)来表示未完待续。
以前开源运动的创始人就是很痛恨鄙视遇到一些私有软件莫名问题,无法跟踪定位代码和修改代码,而造成很大的懊恼,所以,就发起了开源软件运动,在遇到问题时,进行代码走查或者编译一个版本手工调试一下,就可以知道发生了什么问题 ,而且可以将此修改建议补充到开源软件中,促进此软件的良性循环,这是一个非常好的想法,因为许多次我就是从中得益的,呵呵!
另外,在log4cpp的设计中,发现一种设计思想,用*指针传入的对象,log4cpp可能会负责将其释放和删除,但是传&引用的场景,则仅是一个引用而已,需要由外部使用者负责清除,表现最为明显的就是Category的addAppender方法。新手使用的时间,可能会犯一些错误,导致一些释放时的问题,需要注意!
整体上来讲,log4cpp还是非常好用的软件,也比较类似于log4j的设计:)
我的
设置20M时,RollingFileAppender的文件大小20M可以进行拆分;
设置小于20M时,文件超过设置值文件不进行;
但是对于RollingFileAppender,实现文件日志循环打印的日志输出的类,对于多线程的支持是不够好的,可以从其实现代码对于文件描述符fd的操作看出来。 有读、有写、有关闭,但是代码里面却没有半点进行多线程的保护。
这样的实现版本,对于每个日志Category类别具有一份独立的文件RollingFileAppender,也是没有问题的。log4CPP在Category上输出日志,因为需要遍历所有的appender,以及与其他appender集合的操作互斥,而不得不加上锁。这把锁也在实际上也保护了文件操作,每一个日志类别具有独立的appender,直接使用log4cpp默认实现,则不受到影响。但如果情况恰恰是相反,很多Category仅对应一个RollingFileAppender的话,则RollingFileAppender的实现不足以保护多线程访问。
在我们的实践中,表现为日志文件超过了设定的大小,也不进行分拆,而是日志文件持续增大。对于此故障现象,怀疑为系统内部已经异常,因此也还出现其他的一些怪现象。但不是非常确切地知道是否于此有关,所以此文件标题用(一)来表示未完待续。
以前开源运动的创始人就是很痛恨鄙视遇到一些私有软件莫名问题,无法跟踪定位代码和修改代码,而造成很大的懊恼,所以,就发起了开源软件运动,在遇到问题时,进行代码走查或者编译一个版本手工调试一下,就可以知道发生了什么问题 ,而且可以将此修改建议补充到开源软件中,促进此软件的良性循环,这是一个非常好的想法,因为许多次我就是从中得益的,呵呵!
另外,在log4cpp的设计中,发现一种设计思想,用*指针传入的对象,log4cpp可能会负责将其释放和删除,但是传&引用的场景,则仅是一个引用而已,需要由外部使用者负责清除,表现最为明显的就是Category的addAppender方法。新手使用的时间,可能会犯一些错误,导致一些释放时的问题,需要注意!
整体上来讲,log4cpp还是非常好用的软件,也比较类似于log4j的设计:)
我的
设置20M时,RollingFileAppender的文件大小20M可以进行拆分;
设置小于20M时,文件超过设置值文件不进行;
发表评论
-
manifest
2015-06-08 17:57 1820我遇到的问题: 将 Upload.exe Upload.exe ... -
minizip压缩文件夹(转)
2015-06-01 10:26 2179#include <atlconv.h> / ... -
文件大小(转)
2015-06-01 10:08 472方法一: WIN32_FIND_DATA fi ... -
log4cpp环境变量
2015-05-13 15:32 654log4cplus.appender.DEBUG_MSG.Fi ... -
linux设置环境变量putenv() setenv() getenv()(转)
2015-05-13 15:28 1154linux设置环境变量putenv() setenv() ge ... -
编译log4cpp 1.0
2015-05-13 15:25 701编译log4cpp 1.01、下载地址http://log4c ... -
VC学习:log4cpp
2015-05-12 15:37 770基于LGPL开源项目 Log4cpp ... -
VC异常:File:write.c Line:67
2015-05-12 15:29 724VC异常:File:write.c Line:67 路径没找 ... -
C++异常:rethrow【转】
2015-05-08 15:20 396C++异常rethrow【转】 http://se.csai. ... -
VC异常:Free Heap block xxxxxxxx modified at xxxxxxxx after it was freed(转)
2015-05-08 15:18 1076Free Heap block xxxxxxxx modifi ... -
VC异常:Free Heap block XXXXXX modified at XXXXXX after it was freed(转)
2015-05-07 15:41 2974Free Heap block XXXXXX modified ... -
VC中关于 0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值说明
2015-05-07 15:14 1099VC中关于 0xcccccccc、0xcdcdcdcd和 0x ... -
析构函数后,还可以调用函数成员
2015-05-07 15:13 858析构函数后,还可以调用函数成员 类的所有的函数成员的是编译时期 ... -
[size=medium] c,c#判断socket是否断开[/size]
2015-03-17 13:28 1075c,c#判断socke ... -
时间转换
2015-01-08 11:55 464时间转换 public static long DateT ... -
C++ localtime函数需要注意的地方
2015-01-08 11:42 990time_t tLast = pLastFQKLineIt ... -
TerminateThread
2014-11-13 14:04 657TerminateThread. 如线程内部不涉及空间开辟, ... -
VC退出线程的方法(转载)
2014-10-23 17:39 687VC退出线程的方法 标题很简单,但是要讨论的地方不少; ... -
创建文件夹CreateDirectoryA(file, 0);
2014-10-23 17:19 1477创建文件夹CreateDirectoryA(file, 0) ... -
heap corruption detected错误解决方法调试方法以及内存管理相关(转载)
2014-10-23 16:57 1084heap corruption detected错误解决方法调 ...
相关推荐
完整分析了log4cpp的整体架构,详细介绍了log4cpp的这个重要组件的实现分析了log4cpp内部所使用的设计模式。介绍了log4cpp中的Category的完整实现细节,介绍了所有的Layout及其子类的具体实现。也详细介绍了比较常用...
自己编译好的log4cpp的DLL 和 LIB 封装了一个使用类,从本地读取配置log级别等信息,可输出多个种类的日志文件,输出示例如下 [2017-02-20 16:09:51.910](NOTICE)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton1...
log4cpp用vs2010编译好的DLL 内包括:Debug/Release 两个模式的 log4cppD.lib log4cppD.dll log4cpp.lib log4cpp.dll 四个文件,以及 头文件
Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。网上也已经有了各种各样“教材”,但都太零碎。 本文详细的介绍了Log4cpp的各种用法,包括编译、应用、配置。同时,作者提供了自己的...
通过制定版本交叉编译器,对开源代码log4cpp进行编译,之后产生的动态链接库拷贝到arm控制系统中,通过对应用接口的调用实现日志的生成,如果需要二次封装的接口
LOG4CPP 支持多个文件,DEBUG/NOTICE/WARNING/ERROR/CRITICAL分别打到不同的文件
代码是C++,基于LOG4CPP进行封装日志,适用于Linux环境,使用过程时,对其进行继承即可套用其结构
记录了C++中使用Log4Cpp的整体使用源码,具体可参考:http://blog.csdn.net/jptiancai/article/details/23678073
vs2008 release模式下编译好的log4cpp 1.1.1。内有详细的配置过程描述。已经可以在releases模式下正常编译。
C++使用Log4cpp记录日志,包括说明文档及相关关键代码、包括log4cpp-1.1.2.tar.gz。
在log4cpp下载的包基础上添加按日期生成日志类,仅供学习和交流
log4cpp-1.1.3,msvc2017-64bit编译版本,dev开发专用,带lib、include、dll。
log log4cpp vc vclog c++log
log4cpp-1.1.3.tar.gz源码和测试代码
附件包含log4cpp相关介绍,用法以及简单实例。供开发人员使用。 可以实现log信息自定义、定制化输出等
Android NDK开发 log4cpp
log4cpp的源代码。log4cpp是用C++语言编写的日志工具,借鉴了log4j的思想,可以自由配置日志的输出格式、输出文件等,是一个很方便的程序调试、运行追踪工具。
log4cpp android ndk
log4cpp-开源日志库,内有VS2010解决方案
这个源文件展示了C++下的日志管理类log4cpp的使用方法,当然log4cpp是一个很强大的管理工具,所以只是演示了一些最常用的方法。