Click here to Skip to main content
15,891,409 members
Articles / Programming Languages / C++

Remote SOF - An OSGI-like modularization framework for C++ supporting distributed software modules

Rate me:
Please Sign up or sign in to vote.
4.58/5 (8 votes)
13 Jul 2009BSD10 min read 31.3K   15  
The article describes the usage of a modularization framework called Remote SOF supporting distributed software modules.
#ifndef LOGGER_IMPL_H
#define LOGGER_IMPL_H

#include <string>
#include <vector>

#include "Logger.h"

namespace sof { namespace util { namespace logging {

using namespace std;

/**
 * The <code>LoggerImpl</code> class implements the
 * <code>Logger</code> interface and is reponsible for
 * printing the log messages to the console.
 *
 * @author magr74
 */
class LoggerImpl : public Logger
{
	private:

		/**
		 * The name of the log channel.
		 */
		string logCh;

		/**
		 * Caches the possible log levels.
		 */
		string levels[4];

		/**
		 * The current log level.
		 */
		unsigned int level;

		/** 
		 * Helper method for printing the log messages.
		 * 
		 * @param messageParts
		 *				A vector containing all string parts of the log message.
		 *
		 * @param level
		 *				The log level of the log message which was set by the user.		
		 */
		void logMessage( const vector<string>& messageParts, LogLevel level );
		
		/** 
		 * Helper method for printing the log messages.
		 * 
		 * @param msg
		 *				The message text.
		 *
		 * @param messageParts
		 *				A vector containing all integer parameters of the log message.
		 *
		 * @param level
		 *				The log level of the log message which was set by the user.		
		 */
		void logMessage( const string& msg, const vector<int>& messageParts, LogLevel level );
		
		/** 
		 * Helper method for printing the log messages.
		 * 
		 * @param msg
		 *				The message text.
		 *
		 * @param messageParts
		 *				A vector containing all boolean parameters of the log message.
		 *
		 * @param level
		 *				The log level of the log message which was set by the user.		
		 */
		void logMessage( const string& msg, const vector<bool>& messageParts, LogLevel level );

		/**
		 * Caches the last printed log message.
		 */
		string lastLogMessage;

	public:

		/**
		 * Creates instances of class <code>LoggerImpl</code>.
		 *
		 * @param channel
		 *				The name of the log channel.
		 */
		LoggerImpl( const string& channel );

		/**
		 * Logs a message containing three string parameters.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 *
		 * @param param1
		 *				The first string parameter.
		 *
		 * @param param2
		 *				The second string parameter.
		 *
		 * @param param3
		 *				The third string parameter.
		 */
		void log( LogLevel level, const string& message, const string& param1,
				const string& param2, const string& param3 );

		/**
		 * Logs a message containing two string parameters.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 *
		 * @param param1
		 *				The first string parameter.
		 *
		 * @param param2
		 *				The second string parameter.
		 */
		void log( LogLevel channel, const string& message, const string& param1,
				const string& param2 );

		/**
		 * Logs a message containing one string parameter.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 *
		 * @param param1
		 *				The first string parameter.
		 */
		void log( LogLevel level, const string& message, const string& param1 );

		/**
		 * Logs a message containing three integer parameters.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 *
		 * @param param1
		 *				The first integer parameter.
		 *
		 * @param param2
		 *				The second integer parameter.
		 *
		 * @param param3
		 *				The third integer parameter.
		 */
		void log( LogLevel level, const string& message, int param1,
				int param2, int param3 );

		/**
		 * Logs a message containing two integer parameters.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 *
		 * @param param1
		 *				The first integer parameter.
		 *
		 * @param param2
		 *				The second integer parameter.
		 */
		void log( LogLevel level, const string& message, int param1,
				int param2 );

		/**
		 * Logs a message containing one integer parameter.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 *
		 * @param param1
		 *				The first integer parameter.
		 */
		void log( LogLevel level, const string& message, int param1 );

		/**
		 * Logs a message without any parameters.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 */
		void log( LogLevel level, const string& message );

		/**
		 * Logs a message containing one boolean parameter.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 *
		 * @param param1
		 *				The first boolean parameter.
		 */
		void log( LogLevel level, const string& message, bool param1 );

		/**
		 * Logs a message containing two boolean parameters.
		 *
		 * @param level
		 *				The log level.
		 *
		 * @param message
		 *				The log message.
		 *
		 * @param param1
		 *				The first boolean parameter.
		 *
		 * @param param2
		 *				The second boolean parameter.
		 */
		void log( LogLevel level, const string& message, bool param1, bool param2 );

		/**
		 * Sets the log level. The logger checks for each 
		 * <code>log</code> call whether the log level of the
		 * log call matches the system wide log level set
		 * by this method. If it matches the log message is printed
		 * to the console, otherwise the log message is not printed.
		 *
		 * @param level
		 *			The log level (NOLOG, ERROR_, TRACE, DEBUG.
		 */
		void setLogLevel( Logger::LogLevel level );


};

}}}
#endif 

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The BSD License


Written By
Software Developer
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions