30 #include <boost/bind.hpp> 31 #include <boost/filesystem/fstream.hpp> 32 #include <boost/format.hpp> 33 #include <boost/algorithm/string.hpp> 35 #include "../runtime/ContainerIO.h" 36 #include "../config/ConfigFileSource.h" 47 const string LoggerFactory::DEFAULT_LOGGING_SYSTEM =
"console";
48 const Logger::Level LoggerFactory::DEFAULT_LEVEL = Logger::LEVEL_WARN;
75 if (node->getAssignedLevel()) {
79 node->getLoggerProxy()->getLogger()->setLevel(level);
90 boost::recursive_mutex& mutex) :
91 treeNode(treeNode), mutex(mutex) {
99 boost::recursive_mutex::scoped_lock lock(mutex);
101 node->getLoggerProxy()->getLogger()->setLevel(level);
102 node->setAssignedLevel(level);
114 LoggerFactory::LoggerFactory() {
115 reselectLoggingSystem();
117 LoggerPtr logger(loggingSystem->createLogger(
""));
125 loggerTree->setLoggerProxy(proxy);
129 logger->setLevel(DEFAULT_LEVEL);
130 loggerTree->setAssignedLevel(DEFAULT_LEVEL);
133 LoggerFactory::~LoggerFactory() {
140 newSystem(newSystem) {
146 node->getLoggerProxy()->getLogger()->getLevel();
147 node->getLoggerProxy()->setLogger(
148 newSystem->createLogger(LoggerTreeNode::pathToName(path)));
149 node->getLoggerProxy()->getLogger()->setLevel(oldLevel);
156 void LoggerFactory::reselectLoggingSystem(
const std::string& nameHint) {
157 std::string systemName
158 (nameHint.empty() ? DEFAULT_LOGGING_SYSTEM : nameHint);
160 (LoggingSystemFactory::getInstance().createInst(systemName));
163 boost::recursive_mutex::scoped_lock lock(mutex);
165 this->loggingSystem = system;
169 const Logger::Level oldLevel = loggerTree->getLoggerProxy()->getLevel();
170 loggerTree->getLoggerProxy()->setLogger(
171 loggingSystem->createLogger(
""));
172 loggerTree->getLoggerProxy()->getLogger()->setLevel(oldLevel);
182 loggingSystem->createLogger(LoggerTreeNode::pathToName(path)));
191 node->getParent()->getLoggerProxy()->getLogger()->getLevel());
196 boost::recursive_mutex::scoped_lock lock(mutex);
199 return loggerTree->getLoggerProxy();
202 boost::bind(&LoggerFactory::createLogger,
this, _1, _2));
203 return node->getLoggerProxy();
215 if (node->hasAssignedLevel()) {
216 node->setAssignedLevel(newLevel);
218 node->getLoggerProxy()->getLogger()->setLevel(newLevel);
227 boost::recursive_mutex::scoped_lock lock(mutex);
228 loggerTree->getLoggerProxy()->getLogger()->setLevel(level);
229 loggerTree->setAssignedLevel(level);
234 string LoggerFactory::getLoggingSystemName() {
235 boost::recursive_mutex::scoped_lock lock(mutex);
236 return this->loggingSystem->getName();
239 void LoggerFactory::clearKnownLoggers() {
240 boost::recursive_mutex::scoped_lock lock(mutex);
241 loggerTree->clearChildren();
244 void LoggerFactory::reconfigureFromFile(
const string& fileName) {
246 boost::filesystem::ifstream stream(fileName);
248 throw invalid_argument(
"Unable to open file " + fileName);
boost::recursive_mutex & mutex
boost::shared_ptr< LoggerProxy > LoggerProxyPtr
Objects of this class parse streams that contain configuration information in "ini-file" syntax...
bool visit(const LoggerTreeNode::NamePath &path, LoggerTreeNodePtr node, const Logger::Level &)
Called for each node in the tree.
Visitor interface to operate on the tree.
bool visit(const LoggerTreeNode::NamePath &, LoggerTreeNodePtr node, const Logger::Level &)
Called for each node in the tree.
A simple tree representation for loggers.
void provideOptions(OptionHandler &handler)
Implementations should pass all configuration options to handler.
ReconfigurationVisitor(const Logger::Level &newLevel)
A Visitor that propagates a logging level down the logger tree but stops if a logger already as a lev...
std::vector< std::string > NamePath
A unique representation of a name.
Level
Possible logging levels.
void call(LoggerProxyPtr, const Logger::Level &level)
boost::shared_ptr< LoggingSystem > newSystem
A proxy to an instance of Logger, which provides the same interface but allows to exchange the underl...
ReselectVisitor(boost::shared_ptr< LoggingSystem > newSystem)
virtual ~TreeLevelUpdater()
boost::shared_ptr< LoggingSystem > LoggingSystemPtr
bool visit(const LoggerTreeNode::NamePath &, LoggerTreeNodePtr node, const Logger::Level &)
Called for each node in the tree.
boost::shared_ptr< SetLevelCallback > SetLevelCallbackPtr
LoggerTreeNodeWeakPtr treeNode
boost::shared_ptr< LoggerTreeNode > LoggerTreeNodePtr
LevelSetter(const Logger::Level &level)
boost::shared_ptr< Visitor > VisitorPtr
TreeLevelUpdater(LoggerTreeNodeWeakPtr treeNode, boost::recursive_mutex &mutex)
Interface for callbacks which are invoked when someone calls setLevel on this proxy.
A class which configures the logging tree using configuration subsystem of RSC.
boost::weak_ptr< LoggerTreeNode > LoggerTreeNodeWeakPtr
boost::shared_ptr< Logger > LoggerPtr