源代码续
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++编程中,读取配置文件是一项常见的任务,它允许程序在运行时根据外部文件中的设置进行调整,而不是硬编码这些参数。本教程将详细讲解如何使用C++读取配置文件,特别是针对TXT格式的文件,因为它们简单且易于...
本文将详细介绍如何在C++项目中整合`spdlog`,创建一个`message`类来包装日志功能,并读取外部配置文件以实现灵活的日志管理。 首先,`spdlog`库提供了多种日志级别(如`trace`, `debug`, `info`, `warn`, `error`,...
标题“从配置文件动态创建菜单”揭示了我们讨论的主题,即通过读取配置文件(可能是JSON、XML或YAML格式)来构建应用的菜单结构。这样的设计模式有诸多优点,比如灵活性、可扩展性和易于维护性。 描述“从配置文件...
本模块提供了一种在Ubuntu环境下使用C++读取INI配置文件的方法,使得开发者能方便地获取和修改配置信息。以下是关于这个功能模块的关键知识点和实现细节: 1. **INI文件格式**:INI文件是一种简单的文本格式,通常...
1. **读取配置文件**:`GetPrivateProfileString`用于读取配置文件中的键值。函数原型如下: ```cpp DWORD GetPrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR ...
在IT开发过程中,读取配置文件是一个常见的任务,它允许我们动态地管理应用程序的设置,如数据库连接字符串、API密钥或系统参数。本篇文章将深入探讨如何以简单的方式读取本地配置文件,并结合CListBox控件实现中...
1. **读取配置文件**: - XML文件:利用CoCreateInstance创建MSXML的DOM对象,然后调用load方法加载文件,通过IXMLDOMNode接口获取和解析元素及属性。 - INI文件:使用GetPrivateProfileString读取特定键值对,...
总结,C++通过适当库与Lua结合,能灵活地处理配置文件,提供动态配置更新的能力,这对于需要频繁调整配置的软件项目来说非常有用。在VS2012环境中,可以便捷地构建这样的系统,实现高效且安全的配置管理。
TinyXML-2是一个小型、快速且易于使用的C++ XML解析器,它能将XML数据读取到DOM(文档对象模型)结构中,然后可以遍历这个结构并将其转换回XML字符串,或者将对象的状态写入XML文件。 在C++中,实现对象序列化通常...
2. **读取配置文件**:在程序启动时,使用`ConfigurationManager.AppSettings`读取配置文件中的DLL路径。 ```csharp using System.Configuration; string dllPath = ConfigurationManager.AppSettings["DynamicDll...
本示例将详细介绍如何在C++中读取Lua配置文件并将其转换为JSON格式。 首先,我们需要在C++项目中集成Lua库。这通常涉及下载Lua源代码,编译为静态或动态库,并在C++项目中链接。确保你正确地配置了头文件路径和库...
在IT行业中,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,广泛应用在配置文件、数据交换和文件存储等方面。C++作为一款强大的编程语言,虽然原生并不支持XML处理,但可以通过第三方库...
2. 编写解析器:创建一个解析器读取配置文件,将文件中的数据转换为程序可以理解的对象或变量。这可能涉及到DOM、SAX等XML解析库,或直接处理INI文件的API。 3. 绑定控件属性:在程序初始化或用户选择皮肤时,遍历...
在C++编程中,处理配置文件是常见的任务,它允许程序根据不同的环境或用户需求动态地改变行为。本文将深入探讨如何使用C++通过map来读取和调用配置文件,以及提供一个简单的源码实现。 配置文件通常采用文本格式,...
本项目名为"项目生成与读取配置文件测试",主要关注的是如何在代码中创建、读取和处理这些配置文件。这里我们将详细探讨配置文件的重要性、常见格式、读取方式以及在实际项目中的应用。 1. 配置文件的重要性: - ...
配置文件通常用于存储应用的设置、参数或特定环境的信息,以便程序在运行时能够动态调整行为。本篇文章将探讨如何通过宏来简化配置文件的处理,提高代码的可读性和可维护性。 首先,我们关注"ConfigBase.h"这个...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它在软件开发中,特别是C++编程中,常被用来进行配置文件管理。C++程序使用XML文件作为配置可以提供一种灵活且可读性强的方式来存储和管理...
下面是一个简单的示例,展示如何使用`CIniFile`来读取配置文件: ```cpp #include #include #include CIniFile iniFile; iniFile.Init("config.ini", TRUE); // 初始化配置文件,TRUE表示创建文件如果不存在 /...
// 创建一个文件路径对象 FFileHelper* FileHelper = &FFileHelper::Get(); // 检查文件是否存在 if (!FileHelper->Exists(*FilePath)) { UE_LOG(LogTemp, Error, TEXT("JSON文件不存在: %s"), *FilePath); ...
总结来说,这个源码实例展示了如何在C++中实现动态参数初始化,通过动态读取ini配置文件,提高了软件的适应性和用户友好性。同时,利用`std::vector`作为动态数组,使得程序能轻松处理配置数据的变化,体现了C++语言...