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

    2006-02-02

    Tag:OO

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://jnn.blogbus.com/logs/1879313.html

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

            }

        }

    }


    收藏到:Del.icio.us