`

log4CPP多线程支持的缺角(一)(转)

 
阅读更多
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时,文件超过设置值文件不进行;
分享到:
评论

相关推荐

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

    LOG4CPP是一个流行的C++日志框架,它提供了灵活且强大的日志处理功能。本篇文章将深入讲解如何在C++中基于LOG4CPP封装一个日志库,以及如何在Linux环境下应用这个封装库。 LOG4CPP是Apache软件基金会的一个项目,它...

    LOG4CPP多个日志文件

    在LOG4CPP中,我们可以创建多个Appender对象,每个Appender负责将日志消息写入一个特定的文件。以下是一个简单的配置示例,展示如何设置多个文件以分离不同级别的日志: ```xml <log4cpp> ...

    mfc使用log4cpp实例

    log4cpp是一款功能强大的C++日志库,其设计灵感来源于Java的log4j。它提供了灵活的日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,以及多输出目标(如文件、控制台、网络等)和可配置的布局模式,使得开发者能够轻松...

    Log4cpp 在程序中生成日志文件

    Log4cpp 是一个流行的开源日志库,尤其适用于 C++ 开发者,它提供了丰富的功能,使开发者能够方便地在程序中生成和管理日志文件。本文将详细介绍如何在 Windows 和 Linux 系统中使用 Log4cpp 库来实现日志功能。 **...

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

    Log4Cpp是一个流行的C++日志库,它模仿了Java的Log4j框架,提供了灵活的日志输出功能。本篇文章将深入探讨如何利用Log4Cpp有效地将日志输出到文件,实现最佳实践。 首先,理解Log4Cpp的基本结构至关重要。Log4Cpp...

    log4cpp-1.1.3代码交叉编译说明

    在本文中,我们将深入探讨如何在ARM环境下交叉编译log4cpp库,这是一个流行的C++日志记录框架。首先,我们需要理解交叉编译的基本概念,它是将源代码在一种架构(如x86)上编译成适用于另一种架构(如ARM)的目标...

    VS2015编译的log4cpp动态库

    log4cpp是一个广泛使用的C++日志记录库,它提供了一种灵活的方式来管理和记录应用程序的日志信息。在C++编程中,日志管理是至关重要的,它可以帮助开发者追踪程序运行状态、定位错误,以及进行性能分析。log4cpp因其...

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

    C++社区中,log4cpp是一个广泛应用的日志库,它提供了灵活的日志记录功能,类似于Java中的log4j。本文将深入探讨log4cpp 1.1.3版本的源码和测试代码,以期理解其工作原理和应用方法。 首先,log4cpp是一个开源的C++...

    log4cpp安装与使用

    log4cpp有很多优点,包括提供了可扩展的多种日志记录方式、提供了NDC(嵌套诊断上下文)、提供了完整的日志动态优先级控制、可通过配置文件完成所有配置并动态加载、性能优秀、内存占用小、代码级的平台无关性、概念...

    log4cpp源码完整解析

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

    C++使用Log4cpp

    Log4cpp是一个流行的C++日志库,它提供了灵活的日志记录功能,允许程序员控制日志级别、输出格式和目标。本文将详细探讨如何在C++项目中使用Log4cpp来实现高效且定制化的日志记录。 首先,Log4cpp的核心概念包括...

    Log4Cpp使用实例

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

    Log4cpp使用样例Linux系统C++程序

    Log4cpp是一个在C++中广泛使用的日志记录库,它提供了一套灵活且可扩展的日志记录框架,便于在应用程序中实现不同级别的日志输出,如DEBUG、INFO、WARN、ERROR等。这个"Log4cpp使用样例Linux系统C++程序"是一个实践...

    log4cpp vs2010 版本

    log4cpp是一个流行的C++日志库,它提供了灵活的日志记录功能,类似于Java中的log4j。本文将详细介绍如何在Visual Studio 2010环境下编译log4cpp,并探讨其主要特性和使用方法。 一、log4cpp简介 log4cpp是基于C++的...

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

    "Log4cpp(添加按日期生成日志类)" 提示我们这是一个关于Log4cpp的项目,而且已经进行了扩展,增加了按照日期生成日志文件的功能。Log4cpp是C++的一个日志记录库,它借鉴了Java中的log4j框架,提供了灵活的日志管理...

    log4cpp_vs2010

    log4cpp的源码包含多个头文件和源文件,通过VS2010的项目管理器创建一个新的C++项目,然后将这些源文件添加到项目中。确保所有必要的依赖项已安装,例如Boost库,因为log4cpp可能会使用Boost库来实现某些功能。在...

    log4cpp C++开源log

    4. **线程安全**:`log4cpp`考虑了多线程环境下的使用,确保在并发环境下也能正确记录日志,避免数据竞争问题。 5. **配置文件支持**:通过配置文件,开发者可以在不修改代码的情况下调整日志行为,增加了灵活性。 ...

    log4cpp 日志 源码

    log4cpp便是这样一个强大的日志库,它以其灵活性、可扩展性和易用性在开源社区中广受好评。本文将深入探讨log4cpp的源码,揭示其内在的设计理念和实现机制,为C++开发者提供宝贵的学习资源。 一、log4cpp简介 log4...

    log4cpp-1.1.1 库文件

    1. **日志级别**:log4cpp支持多个日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,便于过滤不同级别的日志信息,减少不必要的输出。 2. **Appender**:Appender是log4cpp的核心组件,负责将日志信息发送到指定目的...

    日志log4cpp

    "log4cpp"就是这样一款专为C++设计的日志库,它提供了丰富的功能,使得在C++项目中集成日志系统变得简单而高效。本文将详细介绍log4cpp的主要特性和使用方法。 1. **日志级别**: log4cpp支持多种日志级别,包括...

Global site tag (gtag.js) - Google Analytics