文本 Log.json
{
"Logger":
{
"CoreTools": 1,
"Framework": 1,
"Mathematics": 1,
"Rendering": 1,
"Imagics": 1,
"Physics": 1,
"System": 1,
"Network": 1,
"SoundEffect": 1,
"ArtificialIntellegence": 1,
"AssistTools": 1,
"User": 1
},
"Appender":
{
"Console":
{
"Flags": 7,
"Level": 1
},
"File":
[
{
"Directory": "Log/",
"FileName": "CoreTools.log",
"Flags": 7,
"Level": 1,
"MaxFileSize":1000000,
"Backup": true}
]
}
}
头文件
#include "AppenderManage.h"
#include <boost/property_tree/ptree.hpp>
#include <string>
namespace CoreTools
{
class AnalysisAppenderManage
{
public:
typedef AnalysisAppenderManage ClassType;
public:
explicit AnalysisAppenderManage(const std::string& fileName);
#ifdef _DEBUG
bool IsValid() const;
#endif // _DEBUG
AppenderManage GetAppenderManage() const;
private:
void Analysis();
void AnalysisJson();
void AnalysisLogger();
void InsertLogger(const std::string& logLevelTypeData,
LogFilterType filterType);
void AnalysisAppender();
void AnalysisConsoleAppender();
void AnalysisFileAppender();
void InsertAppender(const boost::property_tree::ptree& fileTreeData);
private:
AppenderManage m_AppenderManage;
std::string m_FileName;
boost::property_tree::ptree m_MainTree;
boost::property_tree::ptree m_AppenderTree;
};
}
源文件
#include "CoreTools/Exception/CoreToolsException.h"
#include "AnalysisAppenderManage.h"
#include "Logger.h"
#include "Appender.h"
#include "LogFilterManage.h"
#include "CoreTools/CharacterString/StringConversion.h"
#include "CoreTools/Macro/LogMacro.h"
#include "CoreTools/Macro/ClassInvariantMacro.h"
#include "CoreTools/ClassInvariant/CoreToolsClassInvariant.h"
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
#ifdef _MSC_VER
#pragma warning(disable:4512)
#endif // _MSC_VER
#include <boost/property_tree/json_parser.hpp>
using std::string;
using boost::lexical_cast;
using boost::bad_lexical_cast;
using boost::property_tree::ptree;
using boost::property_tree::ptree_error;
CoreTools::AnalysisAppenderManage
::AnalysisAppenderManage( const string& fileName )
:m_AppenderManage(),m_FileName(fileName),
m_MainTree(),m_AppenderTree()
{
Analysis();
SELF_CLASS_IS_VALID;
}
// private
void CoreTools::AnalysisAppenderManage
::Analysis()
{
AnalysisJson();
AnalysisLogger();
AnalysisAppender();
}
// private
void CoreTools::AnalysisAppenderManage
::AnalysisJson()
{
read_json(m_FileName,m_MainTree);
}
// private
void CoreTools::AnalysisAppenderManage
::AnalysisLogger()
{
BOOST_FOREACH(ptree::value_type& loggerPtree,m_MainTree.get_child("Logger"))
{
LogFilterType filterType =
LogFilterManage::GetLogFilterType(loggerPtree.first);
if(filterType == MaxLogFilter)
continue;
InsertLogger(loggerPtree.second.data(), filterType);
}
}
// private
void CoreTools::AnalysisAppenderManage
::InsertLogger(const string& logLevelTypeData,
LogFilterType filterType )
{
try
{
LogLevelType levelType =
LogLevelType(lexical_cast<int>(logLevelTypeData));
if(LogLevelDisabled <= levelType && levelType < MaxLogLevels)
m_AppenderManage.InsertLogger(Logger(filterType,levelType));
}
catch(bad_lexical_cast& error)
{
LOG_SINGLETON_APPENDER(Warn,CoreTools)
<< error.what()
<< LogAppenderIOManageSignTriggerAssert;
}
}
// private
void CoreTools::AnalysisAppenderManage
::AnalysisAppender()
{
m_AppenderTree = m_MainTree.get_child("Appender");
try
{
AnalysisConsoleAppender();
}
catch(Error& error)
{
LOG_SINGLETON_APPENDER(Warn,CoreTools)
<< error
<< LogAppenderIOManageSignTriggerAssert;
}
AnalysisFileAppender();
}
// private
void CoreTools::AnalysisAppenderManage
::AnalysisConsoleAppender()
{
ptree consoleTree = m_AppenderTree.get_child("Console");
AppenderFlags appenderFlags = AppenderFlags(consoleTree.get("Flags",0));
LogLevelType logLevelType = LogLevelType(consoleTree.get("Level",0));
if(LogLevelDisabled <= logLevelType && logLevelType < MaxLogLevels)
{
Appender appender(appenderFlags,logLevelType);
m_AppenderManage.InsertAppender(TEXT("Console"),appender);
}
}
// private
void CoreTools::AnalysisAppenderManage
::AnalysisFileAppender()
{
BOOST_FOREACH(ptree::value_type& fileTree,m_AppenderTree.get_child("File"))
{
try
{
InsertAppender(fileTree.second);
}
catch(Error& error)
{
LOG_SINGLETON_APPENDER(Warn,CoreTools)
<< error
<< LogAppenderIOManageSignTriggerAssert;
}
}
}
// private
void CoreTools::AnalysisAppenderManage
::InsertAppender(const ptree& fileTreeData)
{
string directory = fileTreeData.get("Directory","");
string fileName = fileTreeData.get("FileName","");
AppenderFlags flags = AppenderFlags(fileTreeData.get("Flags",0));
LogLevelType level = LogLevelType(fileTreeData.get("Level",0));
unsigned maxFileSize = fileTreeData.get("MaxFileSize",0);
bool backup = fileTreeData.get("Backup",false);
if(!fileName.empty() &&
LogLevelDisabled <= level &&
level < MaxLogLevels)
{
STRING directoryConversion
= StringConversion::MultiByteConversionStandard(directory);
STRING fileNameConversion
= StringConversion::MultiByteConversionStandard(fileName);
Appender appender(directoryConversion,fileNameConversion,
flags,level,maxFileSize,backup);
m_AppenderManage.InsertAppender(fileNameConversion,appender);
}
}
#ifdef _DEBUG
bool CoreTools::AnalysisAppenderManage
::IsValid() const
{
if(m_AppenderManage.IsValid())
return true;
else
return false;
}
#endif // _DEBUG
CoreTools::AppenderManage CoreTools::AnalysisAppenderManage
::GetAppenderManage() const
{
CLASS_IS_VALID;
return m_AppenderManage;
}
boost库property_tree示例
最新推荐文章于 2024-08-22 16:06:07 发布