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

源代码续 

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 ( """ ));

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值