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

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

    博客分类:
  • OO
阅读更多
源代码续 

void

log4cplus :: PropertyConfigurator :: configureAppenders ()

{

    Properties   appenderProperties =

         properties . getPropertySubset ( LOG4CPLUS_TEXT ( "appender." ));

    // 根据 Appenders 文本获取相关的数据

    vector < tstring > appendersProps = appenderProperties . propertyNames ();

    for ( vector < tstring >:: iterator   it = appendersProps . begin ();

        it != appendersProps . end ();

        ++ it )

    {

        if ( (* it ). find ( LOG4CPLUS_TEXT ( '.' ) ) == tstring :: npos ) {

                   // 实现基本的数据采集获取功能

tstring   factoryName = appenderProperties . getProperty (* it );

// 解析获得创建实例所需使用的有关 Factory 的方法

AppenderFactory * factory = getAppenderFactoryRegistry (). get ( factoryName );

// 通过工厂名称来获得相关的工厂方法

            if ( factory == 0) {

                tstring   err =

                    LOG4CPLUS_TEXT ( "PropertyConfigurator::configureAppenders()- Cannot find AppenderFactory: " );

                getLogLog (). error ( err + factoryName );

                continue ;

            }

 

            Properties   properties =

                    appenderProperties . getPropertySubset ((* it ) + LOG4CPLUS_TEXT ( "." ));

try {

 

           // 创建相关的对象链接

                SharedAppenderPtr   appender = factory -> createObject ( properties );

                if ( appender . get () == 0) {

                    tstring   err =

                        LOG4CPLUS_TEXT ( "PropertyConfigurator::configureAppenders()- Failed to create appender: " );

                    getLogLog (). error ( err + * it );

                 }

// 实现对属性值的处理

                else {

                    appender -> setName (* it );

                    appenders [* it ] = appender ;

                }

            }

            catch ( std :: exception & e ) {

                tstring   err =

                    LOG4CPLUS_TEXT ( "PropertyConfigurator::configureAppenders()- Error while creating Appender: " );

                getLogLog (). error ( err + LOG4CPLUS_C_STR_TO_TSTRING ( e . what ()));

            }

        }

    } // end for loop

}

 

 

void

log4cplus :: PropertyConfigurator :: configureAdditivity ()

{

    Properties   additivityProperties =

            properties . getPropertySubset ( LOG4CPLUS_TEXT ( "additivity." ));

    vector < tstring > additivitysProps = additivityProperties . propertyNames ();

 

    for ( vector < tstring >:: iterator   it = additivitysProps . begin ();

        it != additivitysProps . end ();

        ++ it )

    {

        Logger   logger = getLogger (* it );

        tstring   actualValue = additivityProperties . getProperty (* it );

        tstring   value = toLower ( actualValue );

 

        if ( value == LOG4CPLUS_TEXT ( "true" )) {

            logger . setAdditivity ( true );

        }

        else   if ( value == LOG4CPLUS_TEXT ( "false" )) {

            logger . setAdditivity ( false );

        }

        else {

            getLogLog (). warn (   LOG4CPLUS_TEXT ( "Invalid Additivity value: "" )

                             + actualValue

                             + LOG4CPLUS_TEXT ( """ ));

        }

    }

}

分享到:
评论

相关推荐

    C++程序案例MFCFrmX

    打算写一个C++程序 其实我是想用MFC静态库实现一个通过TXT配置文件在程序中动态创建界面的程序。 &lt;br&gt;主要思路是: &lt;br&gt;提供一个基类CSearchBaseDialog,在基类中,程序从配置文件中读取界面控件的信息,然后...

    QT&C++ 学生成绩管理系统 ,无需配置环境,有安装包,适合快速理解.zip

    构建项目时,MOC工具读取C++源文件,当它发现类的定义里有Q_OBJECT宏时,它就会为这个类生成另外一个包含有元对象支持代码的C++源文件,这个生成的源文件连同类的实现文件一起被编译和连接。 除了信号和槽机制外,...

    C++网络爬虫项目

    由WebCrawler对象在从MultiIo对象中等到套接字描述符可读时动态创建,通 过Socket对象接收超文本传输协议响应。WEBCRAWLER 网络爬虫实训项目 9 2.3.4. 网络爬虫(WebCrawler) 代表整个应用程序的逻辑对象,构建并维护...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例214 动态创建视图   cc实例215 通过视图更改数据   cc实例216 删除视图   8.6 触发器   cc实例217 创建触发器   cc实例218 在程序中使用触发器   8.7 存储过程   cc实例219 创建存储...

    C++Builder精彩编程实例集锦的源代码后3部分.rar

    实例026 如何动态创建程序表单 实例027 如何遍历窗体所有组件 实例028 如何保证组件位置相对固定 实例029 如何在窗体中动态增加组件 实例030 如何使组件在程序运行时可以移动 实例031 如何使用组件创建托盘程序...

    C++Builder精彩编程实例集锦的源代码前3部分.rar

    实例026 如何动态创建程序表单 实例027 如何遍历窗体所有组件 实例028 如何保证组件位置相对固定 实例029 如何在窗体中动态增加组件 实例030 如何使组件在程序运行时可以移动 实例031 如何使用组件创建托盘程序...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    8.3 更新数据 cc实例210 批量修改数据 cc实例211 将指定字段数据为空的记录添上数据 8.4 删除数据 cc实例212 删除单条数据 cc实例213 删除数据库中无用处的记录 8.5 视图 cc实例214 动态创建视图 cc...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例214 动态创建视图   cc实例215 通过视图更改数据   cc实例216 删除视图   8.6 触发器   cc实例217 创建触发器   cc实例218 在程序中使用触发器   8.7 存储过程   cc实例219 创建存储...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    vc++ 开发实例源码包

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...

    MFCFrm.rar

    打算写一个C++程序 其实我是想用MFC静态库实现一个通过TXT配置文件在程序中动态创建界面的程序。 &lt;br&gt;主要思路是: &lt;br&gt;提供一个基类CSearchBaseDialog,在基类中,程序从配置文件中读取界面控件的信息,然后...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    6.3.3 C++的动态内存管理 139 6.4 标准文件I/O 141 6.4.1 标准流 141 6.4.2 使用流I/O 141 6.4.3 打开流 142 6.4.4 写入流 143 6.4.5 流的读取 145 6.4.6 搜索位置 148 6.4.7 错误检查 149 6.4.8 关闭流 ...

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

Global site tag (gtag.js) - Google Analytics