`
jnn
  • 浏览: 288339 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

读取配置文件动态创建对象[C++] (1)

    博客分类:
  • OO
阅读更多

 


问题的由来

使用过 Log4J 的朋友应该有这样酷的体会,通过修改配置文件可以很方便得实现对应用程序的日志行为进行定义,而这些都不需要修改任何的应用程序代码。也许你会说,这些在 Java 中是很容易实现的(使用 classforname 就可以很容易实现了)。

 

问题的由来

使用过 Log4J 的朋友应该有这样酷的体会,通过修改配置文件可以很方便得实现对应用程序的日志行为进行定义,而这些都不需要修改任何的应用程序代码。也许你会说,这些在 Java 中是很容易实现的(使用 classforname 就可以很容易实现了)。

但是对于使用 C++ 来进行日常开发的朋友,如果要实现这样的功能又如何来做呢?因为 C++ 语言本身并不支持这样的通过 读取配置文件动态创建对象 的功能。

Log4Cplus   中,使用 C++ 来这种动态配置生成对象的功能,它是怎么实现呢?要知道 C++ 可没有类似于 java 的 class loader 以及 reflection 机制,看来需要自己动手来实现通过读取配置产生合适的 logger appender 对象了。

好在 Log4Cplus 是一个为 C++ 开发的开源 logger 库,它实现了一个 C++ 版的 Log4J 。我们可以通过分析它来探究一下 C++ 实现 读取配置文件动态创建对象 实现原理。  

分析功能,通过读取配置文件后获得需要加载的信息内容,然后通过相关对象实例模块来实现对象实例化操作。

初步分析 , 系统通过读取配置文件来负责加载相关的类实例 , 因此分析可以从配置模块内部入手 , 实现基本的初始化分析。

通过分析源代码目录发现与系统配置相关的对象有以下几部分内容

Properties

PropertyConfigurator

BasicConfigurator

  http://jnn.blogbus.com/files/1138850277.jpg

重点分析 PropertyConfigurator 中的相关代码模块。

下面将结合 PropertyConfigurator 中的实例来进行分析

— 如何实现 Appender 的动态可配置功能

-- 需要分析方法实现

--- initializeLog4cplus ();

--- configureAppenders ();

--- configureLoggers ();

--- configureAdditivity ();

 

 

 

 

 

 

 

 


 
分享到:
评论

相关推荐

    c++读取配置文件

    在C++编程中,读取配置文件是一项常见的任务,它允许程序在运行时根据外部文件中的设置进行调整,而不是硬编码这些参数。本教程将详细讲解如何使用C++读取配置文件,特别是针对TXT格式的文件,因为它们简单且易于...

    c++使用spdlog整合读取配置文件使用

    本文将详细介绍如何在C++项目中整合`spdlog`,创建一个`message`类来包装日志功能,并读取外部配置文件以实现灵活的日志管理。 首先,`spdlog`库提供了多种日志级别(如`trace`, `debug`, `info`, `warn`, `error`,...

    从配置文件动态创建菜单

    标题“从配置文件动态创建菜单”揭示了我们讨论的主题,即通过读取配置文件(可能是JSON、XML或YAML格式)来构建应用的菜单结构。这样的设计模式有诸多优点,比如灵活性、可扩展性和易于维护性。 描述“从配置文件...

    ubuntu系统读取ini配置文件

    本模块提供了一种在Ubuntu环境下使用C++读取INI配置文件的方法,使得开发者能方便地获取和修改配置信息。以下是关于这个功能模块的关键知识点和实现细节: 1. **INI文件格式**:INI文件是一种简单的文本格式,通常...

    VC读取动态配置文件

    1. **读取配置文件**:`GetPrivateProfileString`用于读取配置文件中的键值。函数原型如下: ```cpp DWORD GetPrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR ...

    读取配置文件的简单方式

    在IT开发过程中,读取配置文件是一个常见的任务,它允许我们动态地管理应用程序的设置,如数据库连接字符串、API密钥或系统参数。本篇文章将深入探讨如何以简单的方式读取本地配置文件,并结合CListBox控件实现中...

    vs2008写入读取配置文件操作

    1. **读取配置文件**: - XML文件:利用CoCreateInstance创建MSXML的DOM对象,然后调用load方法加载文件,通过IXMLDOMNode接口获取和解析元素及属性。 - INI文件:使用GetPrivateProfileString读取特定键值对,...

    c++读取lua文件配置测试

    总结,C++通过适当库与Lua结合,能灵活地处理配置文件,提供动态配置更新的能力,这对于需要频繁调整配置的软件项目来说非常有用。在VS2012环境中,可以便捷地构建这样的系统,实现高效且安全的配置管理。

    C++动态生成对象

    TinyXML-2是一个小型、快速且易于使用的C++ XML解析器,它能将XML数据读取到DOM(文档对象模型)结构中,然后可以遍历这个结构并将其转换回XML字符串,或者将对象的状态写入XML文件。 在C++中,实现对象序列化通常...

    c++读取lua配置文件的源代码

    本示例将详细介绍如何在C++中读取Lua配置文件并将其转换为JSON格式。 首先,我们需要在C++项目中集成Lua库。这通常涉及下载Lua源代码,编译为静态或动态库,并在C++项目中链接。确保你正确地配置了头文件路径和库...

    C++解析(读取)xml文件

    在IT行业中,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,广泛应用在配置文件、数据交换和文件存储等方面。C++作为一款强大的编程语言,虽然原生并不支持XML处理,但可以通过第三方库...

    C# WinForm动态加载DLL通过配置文件

    2. **读取配置文件**:在程序启动时,使用`ConfigurationManager.AppSettings`读取配置文件中的DLL路径。 ```csharp using System.Configuration; string dllPath = ConfigurationManager.AppSettings["DynamicDll...

    vc通过配置文件实现自定义界面

    2. 编写解析器:创建一个解析器读取配置文件,将文件中的数据转换为程序可以理解的对象或变量。这可能涉及到DOM、SAX等XML解析库,或直接处理INI文件的API。 3. 绑定控件属性:在程序初始化或用户选择皮肤时,遍历...

    C++简单的配置文件读取调用源码

    在C++编程中,处理配置文件是常见的任务,它允许程序根据不同的环境或用户需求动态地改变行为。本文将深入探讨如何使用C++通过map来读取和调用配置文件,以及提供一个简单的源码实现。 配置文件通常采用文本格式,...

    项目生成与读取配置文件测试

    本项目名为"项目生成与读取配置文件测试",主要关注的是如何在代码中创建、读取和处理这些配置文件。这里我们将详细探讨配置文件的重要性、常见格式、读取方式以及在实际项目中的应用。 1. 配置文件的重要性: - ...

    利用宏简化配置文件读写的类

    配置文件通常用于存储应用的设置、参数或特定环境的信息,以便程序在运行时能够动态调整行为。本篇文章将探讨如何通过宏来简化配置文件的处理,提高代码的可读性和可维护性。 首先,我们关注"ConfigBase.h"这个...

    XML文件配置C++程序

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它在软件开发中,特别是C++编程中,常被用来进行配置文件管理。C++程序使用XML文件作为配置可以提供一种灵活且可读性强的方式来存储和管理...

    VS2010获取配置文件内容

    下面是一个简单的示例,展示如何使用`CIniFile`来读取配置文件: ```cpp #include #include #include CIniFile iniFile; iniFile.Init("config.ini", TRUE); // 初始化配置文件,TRUE表示创建文件如果不存在 /...

    20121022_动态分配const对象(C++)1

    // 读取配置文件... const int *pNum = new const int(num); ``` 这样,`*pNum`的值就不会被后续的代码意外修改。 2. **创建动态大小的数组**:在某些情况下,数组的大小可能在运行时才能确定,比如依赖于用户...

    UE4 C++JSON读取示例.zip

    // 创建一个文件路径对象 FFileHelper* FileHelper = &FFileHelper::Get(); // 检查文件是否存在 if (!FileHelper->Exists(*FilePath)) { UE_LOG(LogTemp, Error, TEXT("JSON文件不存在: %s"), *FilePath); ...

Global site tag (gtag.js) - Google Analytics