- 浏览: 204331 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (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 1879我遇到的问题: 将 Upload.exe Upload.exe ... -
minizip压缩文件夹(转)
2015-06-01 10:26 2255#include <atlconv.h> / ... -
文件大小(转)
2015-06-01 10:08 493方法一: WIN32_FIND_DATA fi ... -
log4cpp环境变量
2015-05-13 15:32 675log4cplus.appender.DEBUG_MSG.Fi ... -
linux设置环境变量putenv() setenv() getenv()(转)
2015-05-13 15:28 1201linux设置环境变量putenv() setenv() ge ... -
编译log4cpp 1.0
2015-05-13 15:25 738编译log4cpp 1.01、下载地址http://log4c ... -
VC学习:log4cpp
2015-05-12 15:37 807基于LGPL开源项目 Log4cpp ... -
VC异常:File:write.c Line:67
2015-05-12 15:29 743VC异常:File:write.c Line:67 路径没找 ... -
C++异常:rethrow【转】
2015-05-08 15:20 421C++异常rethrow【转】 http://se.csai. ... -
VC异常:Free Heap block xxxxxxxx modified at xxxxxxxx after it was freed(转)
2015-05-08 15:18 1176Free Heap block xxxxxxxx modifi ... -
VC异常:Free Heap block XXXXXX modified at XXXXXX after it was freed(转)
2015-05-07 15:41 3070Free Heap block XXXXXX modified ... -
VC中关于 0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值说明
2015-05-07 15:14 1165VC中关于 0xcccccccc、0xcdcdcdcd和 0x ... -
析构函数后,还可以调用函数成员
2015-05-07 15:13 885析构函数后,还可以调用函数成员 类的所有的函数成员的是编译时期 ... -
[size=medium] c,c#判断socket是否断开[/size]
2015-03-17 13:28 1099c,c#判断socke ... -
时间转换
2015-01-08 11:55 486时间转换 public static long DateT ... -
C++ localtime函数需要注意的地方
2015-01-08 11:42 1009time_t tLast = pLastFQKLineIt ... -
TerminateThread
2014-11-13 14:04 684TerminateThread. 如线程内部不涉及空间开辟, ... -
VC退出线程的方法(转载)
2014-10-23 17:39 730VC退出线程的方法 标题很简单,但是要讨论的地方不少; ... -
创建文件夹CreateDirectoryA(file, 0);
2014-10-23 17:19 1509创建文件夹CreateDirectoryA(file, 0) ... -
heap corruption detected错误解决方法调试方法以及内存管理相关(转载)
2014-10-23 16:57 1159heap corruption detected错误解决方法调 ...
相关推荐
LOG4CPP是一个流行的C++日志框架,它提供了灵活且强大的日志处理功能。本篇文章将深入讲解如何在C++中基于LOG4CPP封装一个日志库,以及如何在Linux环境下应用这个封装库。 LOG4CPP是Apache软件基金会的一个项目,它...
在LOG4CPP中,我们可以创建多个Appender对象,每个Appender负责将日志消息写入一个特定的文件。以下是一个简单的配置示例,展示如何设置多个文件以分离不同级别的日志: ```xml <log4cpp> ...
log4cpp是一款功能强大的C++日志库,其设计灵感来源于Java的log4j。它提供了灵活的日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,以及多输出目标(如文件、控制台、网络等)和可配置的布局模式,使得开发者能够轻松...
Log4cpp 是一个流行的开源日志库,尤其适用于 C++ 开发者,它提供了丰富的功能,使开发者能够方便地在程序中生成和管理日志文件。本文将详细介绍如何在 Windows 和 Linux 系统中使用 Log4cpp 库来实现日志功能。 **...
Log4Cpp是一个流行的C++日志库,它模仿了Java的Log4j框架,提供了灵活的日志输出功能。本篇文章将深入探讨如何利用Log4Cpp有效地将日志输出到文件,实现最佳实践。 首先,理解Log4Cpp的基本结构至关重要。Log4Cpp...
在本文中,我们将深入探讨如何在ARM环境下交叉编译log4cpp库,这是一个流行的C++日志记录框架。首先,我们需要理解交叉编译的基本概念,它是将源代码在一种架构(如x86)上编译成适用于另一种架构(如ARM)的目标...
log4cpp是一个广泛使用的C++日志记录库,它提供了一种灵活的方式来管理和记录应用程序的日志信息。在C++编程中,日志管理是至关重要的,它可以帮助开发者追踪程序运行状态、定位错误,以及进行性能分析。log4cpp因其...
C++社区中,log4cpp是一个广泛应用的日志库,它提供了灵活的日志记录功能,类似于Java中的log4j。本文将深入探讨log4cpp 1.1.3版本的源码和测试代码,以期理解其工作原理和应用方法。 首先,log4cpp是一个开源的C++...
log4cpp有很多优点,包括提供了可扩展的多种日志记录方式、提供了NDC(嵌套诊断上下文)、提供了完整的日志动态优先级控制、可通过配置文件完成所有配置并动态加载、性能优秀、内存占用小、代码级的平台无关性、概念...
完整分析了log4cpp的整体架构,详细介绍了log4cpp的这个重要组件的实现分析了log4cpp内部所使用的设计模式。介绍了log4cpp中的Category的完整实现细节,介绍了所有的Layout及其子类的具体实现。也详细介绍了比较常用...
Log4cpp是一个流行的C++日志库,它提供了灵活的日志记录功能,允许程序员控制日志级别、输出格式和目标。本文将详细探讨如何在C++项目中使用Log4cpp来实现高效且定制化的日志记录。 首先,Log4cpp的核心概念包括...
自己编译好的log4cpp的DLL 和 LIB 封装了一个使用类,从本地读取配置log级别等信息,可输出多个种类的日志文件,输出示例如下 [2017-02-20 16:09:51.910](NOTICE)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton1...
Log4cpp是一个在C++中广泛使用的日志记录库,它提供了一套灵活且可扩展的日志记录框架,便于在应用程序中实现不同级别的日志输出,如DEBUG、INFO、WARN、ERROR等。这个"Log4cpp使用样例Linux系统C++程序"是一个实践...
log4cpp是一个流行的C++日志库,它提供了灵活的日志记录功能,类似于Java中的log4j。本文将详细介绍如何在Visual Studio 2010环境下编译log4cpp,并探讨其主要特性和使用方法。 一、log4cpp简介 log4cpp是基于C++的...
"Log4cpp(添加按日期生成日志类)" 提示我们这是一个关于Log4cpp的项目,而且已经进行了扩展,增加了按照日期生成日志文件的功能。Log4cpp是C++的一个日志记录库,它借鉴了Java中的log4j框架,提供了灵活的日志管理...
log4cpp的源码包含多个头文件和源文件,通过VS2010的项目管理器创建一个新的C++项目,然后将这些源文件添加到项目中。确保所有必要的依赖项已安装,例如Boost库,因为log4cpp可能会使用Boost库来实现某些功能。在...
4. **线程安全**:`log4cpp`考虑了多线程环境下的使用,确保在并发环境下也能正确记录日志,避免数据竞争问题。 5. **配置文件支持**:通过配置文件,开发者可以在不修改代码的情况下调整日志行为,增加了灵活性。 ...
log4cpp便是这样一个强大的日志库,它以其灵活性、可扩展性和易用性在开源社区中广受好评。本文将深入探讨log4cpp的源码,揭示其内在的设计理念和实现机制,为C++开发者提供宝贵的学习资源。 一、log4cpp简介 log4...
1. **日志级别**:log4cpp支持多个日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,便于过滤不同级别的日志信息,减少不必要的输出。 2. **Appender**:Appender是log4cpp的核心组件,负责将日志信息发送到指定目的...
"log4cpp"就是这样一款专为C++设计的日志库,它提供了丰富的功能,使得在C++项目中集成日志系统变得简单而高效。本文将详细介绍log4cpp的主要特性和使用方法。 1. **日志级别**: log4cpp支持多种日志级别,包括...